Spring的AOP切入点表达式语法

时间:2016-04-20 12:41:29

标签: spring aop pointcut

我目前正在使用AspectJ 1.6.9,我想知道为什么以下切入点表达式:

(execution (* it.dtt..endpoint.*..*.invoke*(..)))

与声明的方法的执行不匹配:

protected Object invokeInternal(Object object) throws Exception

班级:

it.dtt.prova.endpoint.Richiesta

任何想法?

1 个答案:

答案 0 :(得分:1)

“由于Spring的AOP基于代理的特性,protected方法是通过定义而不是截获的。”

您需要将该方法的访问修饰符更改为public或考虑使用spring-driven native AspectJ weaving

Spring docs

  

由于Spring的AOP框架基于代理的特性,受到保护   根据定义,方法既不被拦截,也不用于JDK代理   (这不适用)也不适用于CGLIB代理(如果是这样的话)   技术上可行,但不建议用于AOP目的)。作为一个   结果,任何给定的切入点都将与公共方法相匹配   只有!

     

如果您的拦截需要包括受保护/私有方法甚至   构造函数,考虑使用Spring驱动的原生AspectJ编织   而不是Spring的基于代理的AOP框架。这构成了一个   不同模式的AOP使用具有不同的特性,所以一定要确定   在做出决定之前先让自己熟悉编织。