我有一个具有以下切入点定义的方面
@Pointcut("execution(public de.company.project..* *(..))")
以及包含以下内容的弹簧配置
<aop:aspectj-autoproxy />
<bean id="myaspect"
class="de.company.project.impl.MyAspect" />
<bean id="someService" class="de.company.project.impl.SomeService" />
<bean name="/SomeService"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="someService" />
<property name="serviceInterface"
value="de.company.project.interf.SomeService" />
</bean>
(真实配置中有多个服务)
我看到在某些方法中调用了方面,但不是在所有方法中都被调用。我怀疑(但还不完全确定)只有直接在接口中声明的方法被包装在方面中,并且在超级接口中声明的方法被忽略(尽管该接口应该匹配相同的切入点)。
这是预期的行为吗?我怎样才能改变它?还可能发生什么?
只是一个猜测。我没有证据证明这可能是您设置中的实际原因。
我知道Spring AOP不会拦截本地方法调用。 IE。如果同一对象调用自己的方法,即使它与切入点表达式匹配,所应用的代理也不会拦截调用。
编辑:另一个猜测。您确定相关类的所有实例都是 Spring 托管代码吗?您的代码(或某些库)的某些部分是否有可能在不使用 Spring 的情况下创建类的实例?
如果发生这种情况,Spring AOP 无法拦截此类 bean,因为 Spring AOP 仅围绕 Spring 管理的 bean 编织。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)