Caching of autowire candidate metadata for injection point matching
Closes gh-24904
This commit is contained in:
parent
0552102780
commit
401f9599ca
|
@ -165,6 +165,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
/** Map of bean definition objects, keyed by bean name. */
|
/** Map of bean definition objects, keyed by bean name. */
|
||||||
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
|
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
|
||||||
|
|
||||||
|
/** Map from bean name to merged BeanDefinitionHolder. */
|
||||||
|
private final Map<String, BeanDefinitionHolder> mergedBeanDefinitionHolders = new ConcurrentHashMap<>(256);
|
||||||
|
|
||||||
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
|
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
|
||||||
private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);
|
private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);
|
||||||
|
|
||||||
|
@ -794,8 +797,11 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
if (mbd.isFactoryMethodUnique && mbd.factoryMethodToIntrospect == null) {
|
if (mbd.isFactoryMethodUnique && mbd.factoryMethodToIntrospect == null) {
|
||||||
new ConstructorResolver(this).resolveFactoryMethodIfPossible(mbd);
|
new ConstructorResolver(this).resolveFactoryMethodIfPossible(mbd);
|
||||||
}
|
}
|
||||||
return resolver.isAutowireCandidate(
|
BeanDefinitionHolder holder = (beanName.equals(beanDefinitionName) ?
|
||||||
new BeanDefinitionHolder(mbd, beanName, getAliases(beanDefinitionName)), descriptor);
|
this.mergedBeanDefinitionHolders.computeIfAbsent(beanName,
|
||||||
|
key -> new BeanDefinitionHolder(mbd, beanName, getAliases(beanDefinitionName))) :
|
||||||
|
new BeanDefinitionHolder(mbd, beanName, getAliases(beanDefinitionName)));
|
||||||
|
return resolver.isAutowireCandidate(holder, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -818,9 +824,16 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
return iterator;
|
return iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void clearMergedBeanDefinition(String beanName) {
|
||||||
|
super.clearMergedBeanDefinition(beanName);
|
||||||
|
this.mergedBeanDefinitionHolders.remove(beanName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearMetadataCache() {
|
public void clearMetadataCache() {
|
||||||
super.clearMetadataCache();
|
super.clearMetadataCache();
|
||||||
|
this.mergedBeanDefinitionHolders.clear();
|
||||||
clearByTypeCache();
|
clearByTypeCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue