From 7c12b68afcc55863b291a83228ae474b86e1a62c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 18 Jun 2015 12:23:12 -0700 Subject: [PATCH] Reduce BeanDefinition cloning from isFactoryBean Update AbstractBeanFactory.isFactoryBean to only create the merged local bean definition when absolutely necessary. Issue: SPR-12236 --- .../beans/factory/support/AbstractBeanFactory.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 22d524d9427c..90200b46c3f2 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -970,7 +970,15 @@ else if (containsSingleton(beanName)) { return ((ConfigurableBeanFactory) getParentBeanFactory()).isFactoryBean(name); } - return isFactoryBean(beanName, getMergedLocalBeanDefinition(beanName)); + RootBeanDefinition mbd = this.mergedBeanDefinitions.get(beanName); + if (mbd != null) { + return isFactoryBean(beanName, mbd); + } + BeanDefinition bd = getBeanDefinition(beanName); + if (bd.getParentName() == null && bd instanceof RootBeanDefinition) { + return isFactoryBean(beanName, (RootBeanDefinition) bd); + } + return isFactoryBean(beanName, getMergedBeanDefinition(beanName, bd)); } @Override