@@ -165,6 +165,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
165
165
/** Map of bean definition objects, keyed by bean name. */
166
166
private final Map <String , BeanDefinition > beanDefinitionMap = new ConcurrentHashMap <>(256 );
167
167
168
+ /** Map from bean name to merged BeanDefinitionHolder. */
169
+ private final Map <String , BeanDefinitionHolder > mergedBeanDefinitionHolders = new ConcurrentHashMap <>(256 );
170
+
168
171
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
169
172
private final Map <Class <?>, String []> allBeanNamesByType = new ConcurrentHashMap <>(64 );
170
173
@@ -794,8 +797,11 @@ protected boolean isAutowireCandidate(String beanName, RootBeanDefinition mbd,
794
797
if (mbd .isFactoryMethodUnique && mbd .factoryMethodToIntrospect == null ) {
795
798
new ConstructorResolver (this ).resolveFactoryMethodIfPossible (mbd );
796
799
}
797
- return resolver .isAutowireCandidate (
798
- new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName )), descriptor );
800
+ BeanDefinitionHolder holder = (beanName .equals (beanDefinitionName ) ?
801
+ this .mergedBeanDefinitionHolders .computeIfAbsent (beanName ,
802
+ key -> new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName ))) :
803
+ new BeanDefinitionHolder (mbd , beanName , getAliases (beanDefinitionName )));
804
+ return resolver .isAutowireCandidate (holder , descriptor );
799
805
}
800
806
801
807
@ Override
@@ -818,9 +824,16 @@ public Iterator<String> getBeanNamesIterator() {
818
824
return iterator ;
819
825
}
820
826
827
+ @ Override
828
+ protected void clearMergedBeanDefinition (String beanName ) {
829
+ super .clearMergedBeanDefinition (beanName );
830
+ this .mergedBeanDefinitionHolders .remove (beanName );
831
+ }
832
+
821
833
@ Override
822
834
public void clearMetadataCache () {
823
835
super .clearMetadataCache ();
836
+ this .mergedBeanDefinitionHolders .clear ();
824
837
clearByTypeCache ();
825
838
}
826
839
0 commit comments