我想使用AOP概念来计算我用我创建的注释标记的一些方法的执行时间。然而,我的问题是我在同一个类中内部引用了带注释的方法。例如:
public void login(params) {
some logic ...
performLogin();
some logic ...
}
@Measured
public void performLogin() {
some logic ...
}
这是一个已知的问题,因为Spring AOP使用的是基于代理的方法,它不会“看到”同一类中的内部调用。显然我可以通过使用AspectJ而不是Spring AOP来解决这种情况。如果我理解正确,可以在Spring内部进行配置。根据我的发现,看起来我应该包含@EnableAspectJAutoProxy
注释来配置Spring以使用AspectJ而不是它自己的AOP。不幸的是,它没有帮助,并且在添加注释之后,没有发生对注释方法的拦截。
在Spring参考文档中有很多关于这个主题的information,我有点迷失了。还有什么我应该做的,以便使用AspectJ吗?
P.S。请注意,我无法重构整个课程并将调用方法移到外面。
P.P.S。我还验证了我的切入点配置。我注释了外部调用的调用方法,它工作正常。
答案 0 :(得分:0)
代理只能实现实际 AspectJ 系统的全部功能的子集,基本上是包装方法的建议。由于它们的性质,代理具有以下限制:
<aop:aspectj-autoproxy />
是不够的 - 它只包装方法,你需要这样的东西:<context:load-time-weaver/>
如果您希望能够提供字段建议,则需要启用Native AspectJ。