1、资源resource定位 2、BeanDefinition的载入和解析得到document对象,再经过DefaultBeanDefinitionDocumentReader中解析的都BeanDefinition然后注册到BeanDefinition ConcurrentHashMap中。
单例bean实例保存在DefaultSingletonBeanRegistry类的ConcurrentHashMap<String, Object>(256);中
依赖注入:
1、bean的载入
BeanDefinition的载入分为两部分:1)、通过调用XML解析器得到document对象,这些对象并没有按照spring的规则进行解析;2)、在DefaultBeanDefinitionDocumentReader中调用如下的方法完成安装对Spring规则的解析和注册。
protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) {
BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);
if (bdHolder != null) {
bdHolder = delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);
try {
// Register the final decorated instance.注册beandefiniton信息到map
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());
}
catch (BeanDefinitionStoreException ex) {
getReaderContext().error("Failed to register bean definition with name '" +
bdHolder.getBeanName() + "'", ele, ex);
}
// Send registration event.
getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));
}
}
3、bean的载入用到概念:
BeanDefinition是bean具体信息的结构体;
DefaultListableBeanFactory是基础beanFactory类完成了工厂的基本工作;
XmlBeanDefinitionReader是封装读取XML文件bean信息到BeanDefinition;
4、常用工厂bean继承关系图: