一、背景 使用AOP动态代理增强统一修改方法,但是由于proxy对象调用invoke方法后,方法再内部自调用时是用的this原对象来调用方法,故无法进行代理 二
一、背景
使用AOP动态代理增强统一修改方法,但是由于proxy对象调用invoke方法后,方法再内部自调用时是用的this原对象来调用方法,故无法进行代理
二、解决方法
- 自定义注解@AopInnerSupport
- 继承AbstractProcessor类,处理携带@AopInnerSupport的类
- 在方法前面按方法3注入proxy代理对象
- 不停递归JCExpression、JCStatement找到满足条件的方法
- 找到所有带有@Transactional的方法
- 然后修改调用了@Transactional的语句this.method()和super.method()成proxy.method(),需要忽略构造方法
AST参考