diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index f4be81938b..024a732b85 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -728,8 +728,10 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto } } + BeanDefinition oldBeanDefinition; + synchronized (this.beanDefinitionMap) { - BeanDefinition oldBeanDefinition = this.beanDefinitionMap.get(beanName); + oldBeanDefinition = this.beanDefinitionMap.get(beanName); if (oldBeanDefinition != null) { if (!this.allowBeanDefinitionOverriding) { throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName, @@ -758,7 +760,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto this.beanDefinitionMap.put(beanName, beanDefinition); } - resetBeanDefinition(beanName); + if (oldBeanDefinition != null || containsSingleton(beanName)) { + resetBeanDefinition(beanName); + } } @Override @@ -794,9 +798,6 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto // (e.g. the default StaticMessageSource in a StaticApplicationContext). destroySingleton(beanName); - // Remove any assumptions about by-type mappings. - clearByTypeCache(); - // Reset all bean definitions that have the given bean as parent (recursively). for (String bdName : this.beanDefinitionNames) { if (!beanName.equals(bdName)) {