我目前使用的AspectJ 1.6.9表达式语法和我不知道为什么下面的切入点表达式:Spring AOP的切点通配符
(execution (* it.dtt..endpoint.*..*.invoke*(..)))
不匹配方法的执行声明:
protected Object invokeInternal(Object object) throws Exception
类的
:
it.dtt.prova.endpoint.Richiesta
什么想法?
我目前使用的AspectJ 1.6.9表达式语法和我不知道为什么下面的切入点表达式:Spring AOP的切点通配符
(execution (* it.dtt..endpoint.*..*.invoke*(..)))
不匹配方法的执行声明:
protected Object invokeInternal(Object object) throws Exception
类的
:
it.dtt.prova.endpoint.Richiesta
什么想法?
“由于Spring AOP的代理性质,protected
方法通过定义不被拦截”。
,你需要的是方法的访问修饰符更改为public
或考虑使用spring-driven native AspectJ weaving
由于Spring的AOP框架的基于代理的性质,保护 方法是通过定义不被拦截,JDK代理 (这不适用)或CGLIB代理(在技术上这是 但不推荐用于AOP目的)都不被拦截。作为 的后果,任何给定的切入点将仅与公共方法 匹配!
如果您的拦截需求包括受保护/私有方法或构造函数,则考虑使用Spring驱动的本机AspectJ编织 而不是Spring的基于代理的AOP框架。这构成了具有不同特征的AOP使用的不同模式,因此请确保 在做出决定之前先熟悉编织。
是的。如果您需要拦截受保护的或私有的方法或使用更强大的AOP工具(如拦截成员访问等),则可以始终在Spring中使用完整的AspectJ。 – kriegaex
该方法名为invokeInternal的事实应该是触发器。它可能是内部调用的,内部方法调用不适用于AOP。 –