IoC容器初始化的最后一步,想容器中注册完成解析得到的BeanDefinition。
方法调用流程图:
入口函数
DefaultBeanDefinitionDocumentReader.java
BeanDefinitionReaderUtils.java
public static void registerBeanDefinition(
BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)
throws BeanDefinitionStoreException {
// Register bean definition under primary name.
String beanName = definitionHolder.getBeanName();
registry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition());
// Register aliases for bean name, if any.
String[] aliases = definitionHolder.getAliases();
if (aliases != null) {
for (String alias : aliases) {
registry.registerAlias(beanName, alias);
}
}
}
可以看到委托给了registry.registerBeanDefinition(),BeanDefinitionRegistry 是一个接口,定义了注册BeanDefinition的行为。这里的registry实际上是容器本身DefaultListableBeanFactory。
DefaultListableBeanFactory.java
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);
//-------------------------------------------------