RefreshScope注解导致AOP环绕通知执行Around执行2次
作者:互联网
1、问题拦截器实例:
@RefreshScope @Aspect @Component public class ControllerAspect { private final Logger logger = LogManager.getLogger(this.getClass()); @Value("${warnTime:500}") private Long warnTime; /** * 切面定义,拦截所有Controller的所有方法 */ @Pointcut("execution(* com.zhi..*Controller.*(..))") private void controller() { } @Around("controller()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { logger.info("环绕通知开始"); try { return joinPoint.proceed(); } finally { logger.info("环绕通知结束"); } } }
说明:@RefreshScope配合@Value注解用于动态获取注册中心中的配置
2、日志输出结果,被拦截的方法只执行了一次,但环绕通知中的方法却执行了2次:
3、去掉RefreshScope注解后的日志输出:
说明:如果没有使用配置中心,单使用RefreshScope注解也不会出现日志输出2次的问题。
4、问题猜测
应该使用RefreshScope注解后ControllerAspect被再次代理,结合@Component总共被代理了2次。
标签:Around,RefreshScope,private,AOP,注解,logger,环绕,日志 来源: https://www.cnblogs.com/zhi-leaf/p/16388792.html