Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置SpringAOP以使用AspectJ_Java_Spring_Aop_Aspectj_Spring Aop - Fatal编程技术网

Java 如何配置SpringAOP以使用AspectJ

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使用的是基于代理的

我想使用AOP概念来计时一些方法的执行时间,我用我创建的注释来标记这些方法。然而,我的问题是,我从同一个类内部引用带注释的方法。例如:

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。我想您可以在注释中共享指向此答案的链接: