From 452260316e08cd3b09c8c727b5d3078c963a839e Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 15 Jul 2014 15:05:13 +0200 Subject: [PATCH] DefaultListableBeanFactory's registerBeanDefinition only calls resetBeanDefinition in case of pre-existing bean definition or pre-existing singleton instance Issue: SPR-8318 (cherry picked from commit a4968b9) --- .../factory/support/DefaultListableBeanFactory.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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)) {