切面永远不会被调用
Aspect never gets called
我的目标是每次带有特定注释的方法完成执行时执行一些代码。我有以下内容:
@Aspect
public class MonitoringAspect {
@After("@annotation(MonitorExecution)")
public void onFinished(JoinPoint jp) {
System.out.println("called!");
}
}
MonitorExecution
注解的代码如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MonitorExecution {
}
这发生在 Spring4 应用程序中,我已将 MonitoringAspect 声明为 bean,如下所示:
<bean id="monitoringAspect" class="com.....MonitoringAspect" />
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="monitoringAspect"/>
</aop:aspectj-autoproxy>
我在通用 class(即不受 spring 管理/不是组件)中有一个 public 方法,该方法用 @MonitorExecution
注释进行了注释.我已成功验证调用了上述方法,但从未触发方面。任何想法可能是什么问题?
aspectj-autoproxy
意味着将为每个 Spring 托管 bean 创建代理 classes(使用 JDK 动态代理或 CGLIB)并且使用这些代理你可以拦截方法调用。因此,如果您的注释方法是 Spring 上下文之外的 class 方法,方面将不起作用
尽管如此,如果您仍想拦截它,则必须仅使用 AspectJ 或与 Spring 结合使用。对于第二个选项,您必须在 spring 配置
中启用加载时编织
查看文档了解详情:
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop
我的目标是每次带有特定注释的方法完成执行时执行一些代码。我有以下内容:
@Aspect
public class MonitoringAspect {
@After("@annotation(MonitorExecution)")
public void onFinished(JoinPoint jp) {
System.out.println("called!");
}
}
MonitorExecution
注解的代码如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MonitorExecution {
}
这发生在 Spring4 应用程序中,我已将 MonitoringAspect 声明为 bean,如下所示:
<bean id="monitoringAspect" class="com.....MonitoringAspect" />
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="monitoringAspect"/>
</aop:aspectj-autoproxy>
我在通用 class(即不受 spring 管理/不是组件)中有一个 public 方法,该方法用 @MonitorExecution
注释进行了注释.我已成功验证调用了上述方法,但从未触发方面。任何想法可能是什么问题?
aspectj-autoproxy
意味着将为每个 Spring 托管 bean 创建代理 classes(使用 JDK 动态代理或 CGLIB)并且使用这些代理你可以拦截方法调用。因此,如果您的注释方法是 Spring 上下文之外的 class 方法,方面将不起作用
尽管如此,如果您仍想拦截它,则必须仅使用 AspectJ 或与 Spring 结合使用。对于第二个选项,您必须在 spring 配置
中启用加载时编织查看文档了解详情: https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop