diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/AdvisedSupport.java b/spring-aop/src/main/java/org/springframework/aop/framework/AdvisedSupport.java index efa0e1e8b5a5..4a963f537c2c 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/AdvisedSupport.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/AdvisedSupport.java @@ -391,6 +391,11 @@ protected final List getAdvisorsInternal() { return this.advisors; } + protected void clearAdvisors() { + this.advisors.clear(); + updateAdvisorArray(); + adviceChanged(); + } @Override public void addAdvice(Advice advice) throws AopConfigException { diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java index d224a93a1a6b..408d4c032666 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java @@ -163,6 +163,7 @@ public void setProxyInterfaces(Class[] proxyInterfaces) throws ClassNotFoundE */ public void setInterceptorNames(String... interceptorNames) { this.interceptorNames = interceptorNames; + initializeAdvisorChain(); } /** @@ -248,7 +249,9 @@ public void setBeanFactory(BeanFactory beanFactory) { */ @Override public Object getObject() throws BeansException { - initializeAdvisorChain(); + if (!this.advisorChainInitialized) { + initializeAdvisorChain(); + } if (isSingleton()) { return getSingletonInstance(); } @@ -430,9 +433,7 @@ private boolean isNamedBeanAnAdvisorOrAdvice(String beanName) { * are unaffected by such changes. */ private synchronized void initializeAdvisorChain() throws AopConfigException, BeansException { - if (this.advisorChainInitialized) { - return; - } + clearAdvisors(); if (!ObjectUtils.isEmpty(this.interceptorNames)) { if (this.beanFactory == null) {