所需jar包:spring-aspects.jar \ aspectjweaver.jar
1.spring 面向切面使用的动态代理技术
- 对接口的实现类做面向切面操作时,用的 JDK 的动态代理
- 对没有实现接口的类做面向切面操作是使用的cglib
2.如何使用
- 首先把Spring面向切面的开关打开 如果使用的XML配置文件则添加:<aop:aspectj-autoproxy/> (注意:需按Spring官网引入XML Schema-based configuration.) 如果是使用注解启动Spring则添加注解:@EnableAspectJAutoProxy
- 然后定义切面类添加@Aspect 注解
- 然后定义@Ponitcut 和 处理方法 @Before @After @Around(pointcut支持与或操作 例如:@Pointcut("anyPublicOperation() && inTrading()"))
- 其中定义的Pointcut意为切点,其中写上表达式表达切点在哪些方法上,其中execution(* com.learn.bean.*.*(..)) 表达此切点在com.learn.bean包下面的所有方法上
- 然后通过处理函数引用切点(注意:此种引用方式 需注意Aspectjweaver.jar的版本匹配,jdk7不能用此包的1.6版本,jdk8我是用的Aspectjweaver1.8.6.jar)
- 当然,也可以直接在处理函数上写上表达式
3.AspectJ表达式 (官网复制下来的)
-
execution For matching method execution join points. This is the primary pointcut designator to use when working with Spring AOP.
- within Limits matching to join points within certain types (the execution of a method declared within a matching type when using Spring AOP).
- this Limits matching to join points (the execution of methods when using Spring AOP) where the bean reference (Spring AOP proxy) is an instance of the given type.
- target Limits matching to join points (the execution of methods when using Spring AOP) where the target object (application object being proxied) is an instance of the given type.
- args Limits matching to join points (the execution of methods when using Spring AOP) where the arguments are instances of the given types.