From c3e432c298b53ec7597bda47c744da0a8efcb82a Mon Sep 17 00:00:00 2001 From: Gong Dewei Date: Fri, 19 Mar 2021 14:40:32 +0800 Subject: [PATCH] fix reference cache (#7412) --- .../spring/DubboConfigInitializationPostProcessor.java | 8 -------- .../apache/dubbo/config/spring/ReferenceBeanManager.java | 8 ++++---- .../annotation/ReferenceAnnotationBeanPostProcessor.java | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigInitializationPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigInitializationPostProcessor.java index c6578d2f70..d9c5181bac 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigInitializationPostProcessor.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigInitializationPostProcessor.java @@ -75,14 +75,6 @@ public class DubboConfigInitializationPostProcessor implements BeanPostProcessor @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { -// try { -// if (bean instanceof ReferenceBean) { -// ReferenceBean referenceBean = (ReferenceBean) bean; -// referenceBeanManager.addReference(referenceBean); -// } -// } catch (Exception e) { -// throw new BeanInitializationException("Initialization reference bean failed", e); -// } return bean; } diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBeanManager.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBeanManager.java index 81afe4d329..46be2e5e82 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBeanManager.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBeanManager.java @@ -94,13 +94,13 @@ public class ReferenceBeanManager implements ApplicationContextAware { * @throws Exception */ public void prepareReferenceBeans() throws Exception { - for (ReferenceBean referenceBean : getReferences()) { - initReferenceBean(referenceBean); - } - // prepare all reference beans Map referenceBeanMap = applicationContext.getBeansOfType(ReferenceBean.class, true, false); for (ReferenceBean referenceBean : referenceBeanMap.values()) { + addReference(referenceBean); + } + + for (ReferenceBean referenceBean : getReferences()) { initReferenceBean(referenceBean); } initialized = true; diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java index 2379f54dc0..e6a97153fb 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java @@ -252,8 +252,8 @@ public class ReferenceAnnotationBeanPostProcessor extends AbstractAnnotationBean beanDefinitionRegistry.registerBeanDefinition(referenceBeanName, beanDefinition); getBeanFactory().registerSingleton(referenceBeanName, referenceBean); - - //referenceBeanManager.addReference(referenceBean); + //cache reference bean, avoid re-inject same element after prepare reference bean + referenceBeanManager.addReference(referenceBean); } catch (Exception e) { throw new Exception("Create dubbo reference bean failed", e); }