在后续使用 AOP 中会用到几个专业术语:连接点、切入点、通知(增强)、切面。
分别是什么意思?
来看这里有个 User 类,里面有增删改查 4 个方法。
public class User { public void add() {} public void delete() {} public void update() {} public void select() {} }
以此辅助说明一下上述 4 个术语:
其中,关于通知(增强),有 5 种类型:
Spring 框架一般基于 AspectJ 实现 AOP 操作。
AspectJ 是一个独立的框架,不是 Spring 的组成部分。为了便捷,把二者结合起来使用。
那么基于 AspectJ 实现 AOP,可以有 2 种方式:
一般为了便捷,使用注解方式。
需要 jar 包如下:
作用是:知道要对哪个类里面的哪个方法进行增强。
结构:
execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))
比如,我有个类 User 在 package com.pingguo.spring5.dao;
里。
(1)示例1
我要增强这个类下面的 add() 方法,表达式这么写:
execution(* com.pingguo.spring5.User.add(..))
*
号:代表所有类型的修饰符。.
add()(2)示例2
我要增强这个类下面的所有方法,表达式这么写:
execution(* com.pingguo.spring5.User.*(..))
这里就是把方法用 *
号替换掉。
(3)示例3
我要增强包com.pingguo.spring5
下的所有类的所有方法:
execution(* com.pingguo.spring5.*.*(..))
仍然是用*
替换对应的地方。