把@EnableAspectJAutoProxy的exposeProxy设为true,是暴露代理对象的意思,也就是可以通过设置这个属性,用AopContext.currentProxy()的方式获取到当前的代理对象,可以解决同一类中两个方法相互调用是aop不生效的问题

@Component
public class MessageService {
public String showMessage(String info) {
System.out.println("OtherInfoServcie-showMessage展示信息:" + info);
//this.formartMsg(info)这样调用,aop增强不会生效
//通过设置@EnableAspectJAutoProxy的exposeProxy设为true,再使用AopContext
//的静态方法获取当前的代理对象
((MessageService) AopContext.currentProxy()).formartMsg(info);
return null;
}
public String formartMsg(String info) {
System.out.println("OtherInfoServcie-formartMsg对象消息" + info + "进行格式化");
return info;
}
}
proxyTargetClass=true的作用是要生成代理对象时强制使用CGLIB的方式。
本文探讨了如何通过在@EnableAspectJAutoProxy上设置exposeProxy为true,解决类内不同方法间AOP代理失效问题,并重点介绍了proxyTargetClass=true的CGLIB代理作用。
1万+

被折叠的 条评论
为什么被折叠?



