首页  >  文章  >  Java  >  为什么我的 AOP 方面在嵌套方法调用中没有被调用?

为什么我的 AOP 方面在嵌套方法调用中没有被调用?

Susan Sarandon
Susan Sarandon原创
2024-10-31 15:51:02325浏览

Why is my AOP Aspect Not Invoked in Nested Method Calls?

嵌套方法调用和 Spring AOP

考虑 ABC.java 中的以下代码:

<code class="java">public void method1() {
    // ...
    method2();
    // ...
}

public void method2() {
    // ...
    // ...
}</code>

将 AOP 添加到 method2 涉及创建切面、 AOPLogger,包含检查访问的方法 checkAccess。 Spring 配置包括:

<code class="xml"><bean id="advice" class="p.AOPLogger" />
<aop:config>
    <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
    <aop:aspect id="service" ref="advice">
        <aop:before pointcut-ref="abc" method="checkAccess" />
    </aop:aspect>
</aop:config></code>

但是,调用 method2 时不会调用切面 checkAccess。缺少什么?

AOP 代理和 Bean 注入

AOP 通过将方面应用于 Bean 周围的代理来工作。当引用 bean 时,它不是实例化的类,而是一个合成的类,它委托给实际的类并添加 AOP 等功能。

在示例中,直接在类上调用 method2。当作为 Spring bean 注入时,封闭类将作为其代理注入,从而触发方法调用的方面。

要在嵌套方法调用上调用 AOP,请考虑以下选项:

  1. Bean 分离:将 method1 和 method2 拆分为单独的 bean。
  2. 非 Spring AOP 框架:利用非面向 Spring 的 AOP 框架进行更精细的控制方面应用程序。

Spring 文档提供了更多详细信息和潜在的解决方法。

以上是为什么我的 AOP 方面在嵌套方法调用中没有被调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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