学堂 学堂 学堂公众号手机端

基于动态代理的AOP内部调用注解失效解决方法

lewis 1年前 (2024-04-15) 阅读数 11 #技术
一、背景

使用AOP动态代理增强统一修改方法,但是由于​​proxy​​​对象调用​​invoke​​​方法后,方法再内部自调用时是用的​​this​​原对象来调用方法,故无法进行代理

二、解决方法使用ApplicationContext.getBean()获取代理对象调用加上注解​​@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)​​,然后使用​​AopContext.currentProxy()​​方法​​@Autowired​​注入自己参考​​lombok​​使用字节码技术自定义注解​​@AopInnerSupport​​继承​​AbstractProcessor​​​类,处理携带​​@AopInnerSupport​​的类在方法前面按方法3注入​​proxy​​代理对象不停递归​​JCExpression​​​、​​JCStatement​​找到满足条件的方法找到所有带有@Transactional的方法​​然后修改调用了@Transactional的语句this.method​​()和super.method()成proxy.method(),需要忽略构造方法

​​AST参考​​


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门