Spring IOC时序图
2021-04-02 18:37:17 32 举报
spring5 IOC时序图
作者其他创作
大纲/内容
DefaultListableBeanFactory beanFactory = createBeanFactory()
AbstractRefreshableApplicationContext
此处为真正的加载,Bean读取器加载Bean定义资源,对配置文件进行读取
new ClassPathXmlApplicationContext调用构造方法构造方法中的this指向具体功能的构造方法
入口
从特定的配置文件中载入实际载入Bean资源
preProcessXml(root)
ClassPathXmlApplicationContext
DefaultListableBeanFactory
loadBeanDefinitions(beanDefinitionReader)
Bean定义资源文件的载入,初始化BeanFactory,并进行XML文件读取,这里将复用BeanFactory中的配置文件读取解析等功能,此时xml中定义的配置都已经转换成各种BeanDefinition对象存储在BeanFactory中
XmlBeanDefinitionReader
customizeBeanFactory
设置Baan配置信息的定位路径
从beanDefinitionHolder获取beanName 通过beanName进行注册
obtainFreshBeanFactory
refreshBeanFactory
refresh是一个模板方法,规定了IOC容器的启动流程,部分逻辑交给子类去实现
加载
postProcessXml(root)
定位
reader.loadBeanDefinitions(configResources)
DefaultBeanDefinitionDocumentReader
注册
refresh()
registerBeanDefinitions
解析操作的本质是将配置信转化为spring封装的Resources的过程
AbstractRefreshableConfigApplicationContext
prepareRefresh
委派给子类,交给子类实现
创建DefaultListableBeanFactory实例,因为它是容器的基础,必须要先被实例化
setConfigLocations(configLocations)
doRegisterBeanDefinitions(Element root)
loadBeanDefinitions(encodedResource)
对<bean>进行解析
resolvePath
IOC带来的主观感受:可以不再手动创建对象,而是从ioc容器中直接获取对象span style=\"font-size: inherit;\
refresh主要作用是 在创建IOC容器之前,如果已经有了容器的存在则需要把已经有的容器销毁和关闭,以保证在refresh之后使用的是新建立的IOC容器,它类似于对IOC同期的重启,在新建立好的容器中对容器进行初始化,对Bean的配置资源进行载入
Bean标签的解析以及注册
loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
解析默认标签析默认标签<import>、<alias>、<bean>、<beans>
准备刷新的上下文环境,这是初始化前的准备及验证工作,获取时间,设置同步标识
AbstractApplicationContext
IOC容器定制化定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象、是否允许bean之间存在循环依赖设置@Autowired和@Qualifier注解解析器QualifierAnnotationAutowireCandidateResolver
BeanDefinitionReaderUtils
initBeanDefinitionReader
将字符串解析为路径
负责配置文件的加载与注册
配置加载配置的加载器
AbstractXmlApplicationContext
用给定的bean工厂BeanDefinitionRegistry对给定的beanDefinition进行注册,实际上通过key*value的形式存储在ConcurrentHashMap类型实例中 到这里为止,已经完全对<bean>进行解析--包括默认的命名空间和自定义部分--并封装到BeanDefinition实例中,并被BeanDefinitionHolder所持有
创建IOC容器,启动容器开始
收藏
收藏
0 条评论
下一页