我目前正在使用AspectJ 1.6.9,我想知道为什么以下切入点表达式:
(execution (* it.dtt..endpoint.*..*.invoke*(..)))
与声明的方法的执行不匹配:
protected Object invokeInternal(Object object) throws Exception
班级:
it.dtt.prova.endpoint.Richiesta
任何想法?
答案 0 :(得分:1)
“由于Spring的AOP基于代理的特性,protected
方法是通过定义而不是截获的。”
您需要将该方法的访问修饰符更改为public
或考虑使用spring-driven native AspectJ weaving
由于Spring的AOP框架基于代理的特性,受到保护 根据定义,方法既不被拦截,也不用于JDK代理 (这不适用)也不适用于CGLIB代理(如果是这样的话) 技术上可行,但不建议用于AOP目的)。作为一个 结果,任何给定的切入点都将与公共方法相匹配 只有!
如果您的拦截需要包括受保护/私有方法甚至 构造函数,考虑使用Spring驱动的原生AspectJ编织 而不是Spring的基于代理的AOP框架。这构成了一个 不同模式的AOP使用具有不同的特性,所以一定要确定 在做出决定之前先让自己熟悉编织。