Spring AOP中pointcut expression表达式解析 Spring AOP中pointcut expression表达式解析

Spring AOP中pointcut expression表达式解析
Spring AOP中pointcut expression表达式解析

标签: aopspringstringreturningparametersservice
Spring AOP中pointcut expression表达式解析
Spring AOP中pointcut expression表达式解析 分类:
***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

pointcutexp包里的任意类.
within(com.test.spring.aop.pointcutexp.*)
pointcutexp包和所有子包里的任意类.
within(com.test.spring.aop.pointcutexp..*)
实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类.
this(com.test.spring.aop.pointcutexp.Intf)
***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.

带有@Transactional标注的所有类的任意方法.
@within(org.springframework.transaction.annotation.Transactional)
@target(org.springframework.transaction.annotation.Transactional)
带有@Transactional标注的任意方法.
@annotation(org.springframework.transaction.annotation.Transactional)
***> @within和@target针对类的注解,@annotation是针对方法的注解

参数带有@Transactional标注的方法.
@args(org.springframework.transaction.annotation.Transactional)
参数为String类型(运行是决定)的方法.
args(String)
Pointcut 可以通过Java注解和XML两种方式配置,如下所示:
[html] view plaincopy
 
  1. <aop:config>  
  2.     <aop:aspectrefaop:aspectref="aspectDef">  
  3.         <aop:pointcutidaop:pointcut>/>  
  4.         <aop:before pointcut-ref="pointcut1" method="beforeAdvice" />  
  5.     </aop:aspect>  
  6. </aop:config>  
  7.   
  8. @Component  
  9. @Aspect  
  10. public class AspectDef {  
  11.     //@Pointcut("execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")  
  12.     //@Pointcut("within(com.test.spring.aop.pointcutexp..*)")  
  13.     //@Pointcut("this(com.test.spring.aop.pointcutexp.Intf)")  
  14.     //@Pointcut("target(com.test.spring.aop.pointcutexp.Intf)")  
  15.     //@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")  
  16.     //@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")  
  17.     @Pointcut("args(String)")  
  18.     public void pointcut1() {  
  19.     }  
  20.     @Before(value = "pointcut1()")  
  21.     public void beforeAdvice() {  
  22.         System.out.println("pointcut1 @Before...");  
  23.     }  
 
9