首页 > Java > java教程 > 正文

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

Linda Hamilton
发布: 2024-10-31 16:54:30
原创
209 人浏览过

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><div class="code" style="position:relative; padding:0px; margin:0px;"><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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板