Spring Aop 动态代理失效分析

匿名 (未验证) 提交于 2019-12-02 23:55:01

Spring Aop 通过动态代理创建代理对象,在调用代理对象方法前后做增强。

当在动态代理方法中调用当前实例的 TransactionalAsync 标记的方法时,注解不会生效;
原因:在此条件下调用注解标记的方法相当于调用实例本身的方法 this.func(),此时不会通过 Spring Aop 的增强,所以注解不生效

  • 配置 <aop:aspectj-autoproxy expose-proxy="true" /> 暴露代理对象,Spring Boot 中可使用 @EnableAspectJAutoProxy(exposeProxy=true) 注解
  • 将方法中的 this.func() 调用修改为以下形式
// 从AppContext中获取当前代理对象(ThreadLocal) Object proxy = AppContext.currentProxy; // 调用代理方法 proxy.func();
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!