如何解决基于动态代理的AOP注解在内部调用中失效的问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计250个文字,预计阅读时间需要1分钟。
一、背景+使用AOP动态代理增强系统一种修改方法,但因为是使用proxy对象调用invoke方法后,方法再内部调用时是用this原对象来调用方法的,故无法进行代理。
一、背景
使用AOP动态代理增强统一修改方法,但是由于proxy对象调用invoke方法后,方法再内部自调用时是用的this原对象来调用方法,故无法进行代理
二、解决方法
- 自定义注解@AopInnerSupport
- 继承AbstractProcessor类,处理携带@AopInnerSupport的类
- 在方法前面按方法3注入proxy代理对象
- 不停递归JCExpression、JCStatement找到满足条件的方法
- 找到所有带有@Transactional的方法
- 然后修改调用了@Transactional的语句this.method()和super.method()成proxy.method(),需要忽略构造方法
AST参考
本文共计250个文字,预计阅读时间需要1分钟。
一、背景+使用AOP动态代理增强系统一种修改方法,但因为是使用proxy对象调用invoke方法后,方法再内部调用时是用this原对象来调用方法的,故无法进行代理。
一、背景
使用AOP动态代理增强统一修改方法,但是由于proxy对象调用invoke方法后,方法再内部自调用时是用的this原对象来调用方法,故无法进行代理
二、解决方法
- 自定义注解@AopInnerSupport
- 继承AbstractProcessor类,处理携带@AopInnerSupport的类
- 在方法前面按方法3注入proxy代理对象
- 不停递归JCExpression、JCStatement找到满足条件的方法
- 找到所有带有@Transactional的方法
- 然后修改调用了@Transactional的语句this.method()和super.method()成proxy.method(),需要忽略构造方法
AST参考

