关于切面失效的问题分析-在spring的bean内部方法调用无法使用AOP切面
背景:测试环境存在切面未生效
1.问题描述:切面失效
代码自定义@Diff注解,使用DiffAspect切面做了部分其他操作,但代理未生效
class ServiceA{
public void method(){
//调用方法 methodA, 但@diff 注解未生效
serviceA.methodA();
}
@Diff(xx)
public void methodA(){
//....
}
}
配置一个DiffAspect切面,理论上只要使用@Diff注解的方法都会被代理,并没有
public class DiffAspect{
//...
@Around("@annotation(com.xx.Diff)")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
}
//....
}
2.问题分析:
原因是内部调用的对象是this,而非Spring容器代理的对象,故代理失效。
3.问题解决
使用AopContext.currentProxy() 获取当前代理类
class ServiceA{
public void method(){
//1.获取当前代理类
ServiceA currentProxy = (ServiceA) AopContext.currentProxy();
//2.调用代理方法
serviceA.methodA();
}
@Diff(xx)
public void methodA(){
}
}
本文来自博客园,作者:执大象,转载请注明原文链接:https://www.cnblogs.com/li-junjie/articles/16424974.html

浙公网安备 33010602011771号