Java 如何配置SpringAOP以使用AspectJ
我想使用AOP概念来计时一些方法的执行时间,我用我创建的注释来标记这些方法。然而,我的问题是,我从同一个类内部引用带注释的方法。例如:Java 如何配置SpringAOP以使用AspectJ,java,spring,aop,aspectj,spring-aop,Java,Spring,Aop,Aspectj,Spring Aop,我想使用AOP概念来计时一些方法的执行时间,我用我创建的注释来标记这些方法。然而,我的问题是,我从同一个类内部引用带注释的方法。例如: public void login(params) { some logic ... performLogin(); some logic ... } @Measured public void performLogin() { some logic ... } 这是一个已知的问题,因为SpringAOP使用的是基于代理的
public void login(params) {
some logic ...
performLogin();
some logic ...
}
@Measured
public void performLogin() {
some logic ...
}
这是一个已知的问题,因为SpringAOP使用的是基于代理的方法,该方法无法“看到”同一类中的内部调用。显然,我可以通过使用AspectJ而不是SpringAOP来解决这种情况。如果我理解正确,它可以从Spring本身进行配置。从我发现的情况来看,似乎我应该包括@enableaspectProxy
注释来配置Spring使用AspectJ而不是它自己的AOP。不幸的是,它没有帮助,并且在添加注释后,没有截获注释方法
Spring参考文档中有很多关于这个主题的内容,我有点不知所措。为了使用AspectJ,我还应该做些什么
p.S.请注意,我无法重构整个类并将调用方法移到外部
p.p.S.我还验证了我的切入点配置。我对外部调用的调用方法进行了注释,它工作得很好。代理只能实现实际AspectJ系统的全部功能的子集,基本上是包装方法的建议。由于其性质,代理具有以下限制:
- 仅拦截外部调用(突破代理边界时)
- 仅拦截公共成员(无法拦截私有/受保护) 不知道本地呼叫(或使用此或超级的呼叫)
嗨,谢谢你的回答。这正是我想做的。正在为配置而挣扎。如果您正在使用java配置,请尝试添加@enableloadtimewaving
进行配置,还可以在我的回答中检查指向本机AspectJs的链接,或者使用编译时编织检查您的项目中是否有aspectjweaver.jar。我想您可以在注释中共享指向此答案的链接: