Skip to content

Commit 9d83281

Browse files
committed
Further locking optimizations for the retrieval of non-singleton beans
Issue: SPR-12250
1 parent b7faef0 commit 9d83281

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ public Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, Strin
226226
@Override
227227
public Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {
228228
Object cacheKey = getCacheKey(bean.getClass(), beanName);
229-
this.earlyProxyReferences.add(cacheKey);
229+
if (!this.earlyProxyReferences.contains(cacheKey)) {
230+
this.earlyProxyReferences.add(cacheKey);
231+
}
230232
return wrapIfNecessary(bean, beanName, cacheKey);
231233
}
232234

spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,7 @@ else if (containsSingleton(beanName)) {
959959

960960
@Override
961961
public boolean isActuallyInCreation(String beanName) {
962-
return isSingletonCurrentlyInCreation(beanName) || isPrototypeCurrentlyInCreation(beanName);
962+
return (isSingletonCurrentlyInCreation(beanName) || isPrototypeCurrentlyInCreation(beanName));
963963
}
964964

965965
/**
@@ -1435,7 +1435,9 @@ protected Class<?> getTypeForFactoryBean(String beanName, RootBeanDefinition mbd
14351435
* @param beanName the name of the bean
14361436
*/
14371437
protected void markBeanAsCreated(String beanName) {
1438-
this.alreadyCreated.add(beanName);
1438+
if (!this.alreadyCreated.contains(beanName)) {
1439+
this.alreadyCreated.add(beanName);
1440+
}
14391441
}
14401442

14411443
/**

0 commit comments

Comments
 (0)