aspectj和spring with aspectj-autoproxy

aspectj和spring with aspectj-autoproxy,第1张

概述我已经使用@Aspect注释声明了我的方面,但建议似乎没有得到应用.该方面适用于我所拥有的其他一些项目,关键区别似乎是其他项目使用注释完全连线,这个特定项目是xml有线.连接注释的唯一bean是Aspect.所以我想知道spring的aspectj是否支持,当使用aspectj-autoproxy时,对于在xml中定义bean的顺序很敏感.例如,将xml中的

我已经使用@Aspect注释声明了我的方面,但建议似乎没有得到应用.该方面适用于我所拥有的其他一些项目,关键区别似乎是其他项目使用注释完全连线,这个特定项目是xml有线.连接注释的唯一bean是Aspect.所以我想知道spring的aspectj是否支持,当使用aspectj-autoproxy时,对于在xml中定义bean的顺序很敏感.

例如,将xml中的aspectj-autoproxy之后声明的bean考虑用于AOP切入点吗?

编辑:

我移动了< aop:aspectj-autoproxy />直到所有豆子都被创造出来之后仍然没有运气.

基本上我的代码包括:

@Component@Aspect public class SomeAspect {    @pointcut("@annotation(MyAnnotation)")    public voID isX() {}    @After("isX()")     public voID XX() {        System.out.println("Called aspect");    }}

我的控制器有类似的东西:

public class XController extends AbstractCommandController {    @MyAnnotation    public voID handleX(...) {        // do stuff    }    @OverrIDe    protected voID handle(...) {        return handleX(...);    }}

然后spring xml是:

我之前的项目通过组件扫描捕获并加载了所有bean.这次是不同的.

EDIT2:
另一个区别是其他项目正在使用@Controller和@RequestMethod.在这种情况下,我正在使用AbstractCommmandController的派生类.我想知道这是否适用:
http://forum.springsource.org/archive/index.php/t-46637.html

即我不能向除handleRequest()之外的任何方法应用建议.

EDIT3:

我最近的尝试是覆盖handleRequest()并在那里应用我的注释.假设当spring代理我的控制器时,它会看到注释并应用建议,因为它通过公共外部调用方法调用.这仍然不起作用.

最佳答案我看到你直接从同一个类中的另一个方法调用方法handleX.这不会考虑注释,因为处理AOP注释的工作是由包装您的类并公开相同接口的JDK代理完成的.

您可以通过使用cglib而不是JDK代理来解决这个问题,但根据我的经验,最可靠的解决方案是不依赖于内部调用的方法的任何AOP注释.

总结

以上是内存溢出为你收集整理的aspectj和spring with aspectj-autoproxy全部内容,希望文章能够帮你解决aspectj和spring with aspectj-autoproxy所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)