@@ -162,6 +162,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
162
162
/** Map of bean definition objects, keyed by bean name. */
163
163
private final Map <String , BeanDefinition > beanDefinitionMap = new ConcurrentHashMap <>(256 );
164
164
165
+ /** Map from bean name to merged BeanDefinitionHolder. */
166
+ private final Map <String , BeanDefinitionHolder > mergedBeanDefinitionHolders = new ConcurrentHashMap <>(256 );
167
+
165
168
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
166
169
private final Map <Class <?>, String []> allBeanNamesByType = new ConcurrentHashMap <>(64 );
167
170
@@ -759,8 +762,11 @@ protected boolean isAutowireCandidate(String beanName, RootBeanDefinition mbd,
759
762
if (mbd .isFactoryMethodUnique && mbd .factoryMethodToIntrospect == null ) {
760
763
new ConstructorResolver (this ).resolveFactoryMethodIfPossible (mbd );
761
764
}
762
- return resolver .isAutowireCandidate (
763
- new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName )), descriptor );
765
+ BeanDefinitionHolder holder = (beanName .equals (beanDefinitionName ) ?
766
+ this .mergedBeanDefinitionHolders .computeIfAbsent (beanName ,
767
+ key -> new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName ))) :
768
+ new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName )));
769
+ return resolver .isAutowireCandidate (holder , descriptor );
764
770
}
765
771
766
772
@ Override
@@ -783,9 +789,16 @@ public Iterator<String> getBeanNamesIterator() {
783
789
return iterator ;
784
790
}
785
791
792
+ @ Override
793
+ protected void clearMergedBeanDefinition (String beanName ) {
794
+ super .clearMergedBeanDefinition (beanName );
795
+ this .mergedBeanDefinitionHolders .remove (beanName );
796
+ }
797
+
786
798
@ Override
787
799
public void clearMetadataCache () {
788
800
super .clearMetadataCache ();
801
+ this .mergedBeanDefinitionHolders .clear ();
789
802
clearByTypeCache ();
790
803
}
791
804
0 commit comments