考虑 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 周围的代理来工作。当引用 bean 时,它不是实例化的类,而是一个合成的类,它委托给实际的类并添加 AOP 等功能。
在示例中,直接在类上调用 method2。当作为 Spring bean 注入时,封闭类将作为其代理注入,从而触发方法调用的方面。
要在嵌套方法调用上调用 AOP,请考虑以下选项:
Spring 文档提供了更多详细信息和潜在的解决方法。
以上是为什么我的 AOP 方面在嵌套方法调用中没有被调用?的详细内容。更多信息请关注PHP中文网其他相关文章!