Spring学习-05day
AOP使用步骤
- 导包
- 基础包:
spring-aspects-4.0.0.RELEASE.jar
- 加强版:(即使目标对象没有实现任何接口也可以创建动态代理)
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
- 写配置
-
AOP的五大注释(
value = execution(访问权限符 返回值类型 方法全类名)
)@Before(value="",argNames="")
目标方法之前@After(value="",argNames="")
目标方法之后@AfterReturningvalue="",pointcut="",returning="",argNames=""
目标方法正常返回值之后@AfterThrowing(value="",pointcut="",throwing="",argNames="")
目标方法抛出异常之后@Around
环绕
-
被标记方法可增加参数
JoinPoint
,用来获取调用这个切面方法的方法名,参数 · · ·-
JoinPoint
接口的常用方法-
Object[] getArgs();
获取传入的参数 -
Signature getSignature();
获取封装了信息的对象,在对象中可以获取到方法名和类路径等信息
-
-
-
value = execution(访问权限符 返回值类型 方法全类名)
- 权限位置可不写,表示匹配任意权限的方法,但不能使用
*
- 参数位置写
*
代表匹配任意类型的参数,使用..
表示匹配任意数量的参数 - 方法全类名中可使用
..
表示符合类型的全部选择 - 方法返回值位置可以写
*
表示任意类型的返回值都可匹配到 - 支持
&& || !
- 权限位置可不写,表示匹配任意权限的方法,但不能使用
-
returning="" 指定要接收返回值的参数名,参数写在被标注的方法括号中
-
throwing="" 指定要接收返回值的参数名,参数写在被标注的方法括号中
-
AOP的五大注释执行顺序
@Before()
@After
@AfterReturning
(正常执行) /@AfterThrowing
(异常执行)
- 测试
- 在从容器中获取对象的时候,不可以使用它的实现类作为类型获取组件,只能使用接口类获取
-
抽取可重用的切点表达式
- 随机创建一个返回值为void的空方法
- 给这个方法添加
@Pointcut()
注解在其中填写execution
表达式 - 在别的注解中填写此方法名,可引用该
execution
表达式