From 9d832816a8f7b88eb9ff7993a2b0d69f0fed4c26 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 6 Oct 2014 17:42:51 +0200 Subject: [PATCH] Further locking optimizations for the retrieval of non-singleton beans Issue: SPR-12250 --- .../aop/framework/autoproxy/AbstractAutoProxyCreator.java | 4 +++- .../beans/factory/support/AbstractBeanFactory.java | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java index bf2c701f9b..208c161fa6 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java @@ -226,7 +226,9 @@ public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport @Override public Object getEarlyBeanReference(Object bean, String beanName) throws BeansException { Object cacheKey = getCacheKey(bean.getClass(), beanName); - this.earlyProxyReferences.add(cacheKey); + if (!this.earlyProxyReferences.contains(cacheKey)) { + this.earlyProxyReferences.add(cacheKey); + } return wrapIfNecessary(bean, beanName, cacheKey); } 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 526ebd73c5..d0a8f18ac8 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 @@ -959,7 +959,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp @Override public boolean isActuallyInCreation(String beanName) { - return isSingletonCurrentlyInCreation(beanName) || isPrototypeCurrentlyInCreation(beanName); + return (isSingletonCurrentlyInCreation(beanName) || isPrototypeCurrentlyInCreation(beanName)); } /** @@ -1435,7 +1435,9 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp * @param beanName the name of the bean */ protected void markBeanAsCreated(String beanName) { - this.alreadyCreated.add(beanName); + if (!this.alreadyCreated.contains(beanName)) { + this.alreadyCreated.add(beanName); + } } /** -- GitLab