【Spring AOP】pointcut 的expression 的各种表达式

任意公共方法的执行: execution(public * *(..)) 

任何一个以“set”开始的方法的执行: execution(* set*(..)) 

AccountService 接口的任意方法的执行: execution(* com.xyz.service.AccountService.*(..)) 

定义在service包里的任意方法的执行: execution(* com.xyz.service.*.*(..)) 

定义在service包或者子包里的任意方法的执行: execution(* com.xyz.service..*.*(..)) 

在service包里的任意连接点(在Spring AOP中只是方法执行) : within(com.xyz.service.*) 

在service包或者子包里的任意连接点(在Spring AOP中只是方法执行) :within(com.xyz.service..*) 

实现了 AccountService 接口的代理对象的任意连接点(在Spring AOP中只是方法执行) : this(com.xyz.service.AccountService) 

实现了 AccountService 接口的目标对象的任意连接点(在Spring AOP中只是方法执行) : target(com.xyz.service.AccountService) 

任何一个只接受一个参数,且在运行时传入的参数实现了 Serializable 接口的连接点 (在Spring AOP中只是方法执行):args(java.io.Serializable) 

请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args只有在动态运行时候传入参数是可序列化的(Serializable)才匹配,而execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配。 

有一个 @Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行) :@target(org.springframework.transaction.annotation.Transactional) 

任何一个目标对象声明的类型有一个 @Transactional 注解的连接点(在Spring AOP中只是方法执行) :@within(org.springframework.transaction.annotation.Transactional) 

任何一个执行的方法有一个 @Transactional annotation的连接点(在Spring AOP中只是方法执行) :@annotation(org.springframework.transaction.annotation.Transactional) 

任何一个接受一个参数,并且传入的参数在运行时的类型实现了 @Classified annotation的连接点(在Spring AOP中只是方法执行) :@args(com.xyz.security.Classified)

https://docs.spring.io/spring-framework/docs/5.1.1.RELEASE/spring-framework-reference/core.html#aop-api

参考文章

https://blog.csdn.net/ma969070578/article/details/94132700

猜你喜欢

转载自blog.csdn.net/xiaoxiao_su123/article/details/112860234
今日推荐