首页  >  文章  >  Java  >  为什么我的 Spring AOP 不拦截另一个方法中的方法调用?

为什么我的 Spring AOP 不拦截另一个方法中的方法调用?

Linda Hamilton
Linda Hamilton原创
2024-10-31 16:54:30151浏览

Why Doesn't My Spring AOP Intercept Method Calls Within Another Method?

Spring AOP 无法拦截另一个方法中的方法调用

考虑 ABC.java 中定义的两个方法:

public void method1() {<pre class="brush:php;toolbar:false">method2();

}

public void method2() {}
< ;/pre>

要在 method2 调用上应用 AOP,您已经定义了一个带有 checkAccess 切面方法的 AOPLogger.java 类。在您的配置文件中:

<br><bean id="advice" class="p.AOPLogger" /><br><aop:config> </p><pre class="brush:php;toolbar:false"><aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
<aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
</aop:aspect>


但是调用method2时,并没有触发AOPLogger中的checkAccess方法。

说明

AOP 方面应用于围绕 bean 的代理。当您获取对 bean 的引用时,您实际上并未使用配置中指定的类。相反,您会看到一个合成类,它实现适当的接口、委托调用并提供附加功能(例如,您的 AOP)。

在这种情况下,您是直接调用类的method2。如果该类的实例作为 Spring bean 注入到另一个 bean 中,那么它将作为代理注入。因此,任何方法调用都将定向到代理(并且将触发方面)。

解决方案

< p>要解决此问题,请考虑以下选项:

    <li>Separate method1 and method2 into distinct beans.</li>
    <li>Employ a non-Spring AOP framework.</li>

以上是为什么我的 Spring AOP 不拦截另一个方法中的方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn