spring源码解析
条评论本系列博客为看书留下的笔记,记录整个spring运行过程。主要分为四个模块,如下
- spring 启动(ClassPathXmlApplicationContext)
- 分割传入location路径
- refresh()模板启动
- IOC 启动(obtainFreshBeanFactory())
- 准备容器
- 销毁之前容器
- 创建新容器
- 加载BeanDefinition
- 初始化XmlBeanDefinitionReader
- 解析资源文件路径(分别处理location为文件路径、URL路径、等情况,封装成Resource对象)
- 加载文件内容(根据Resource对象,加载xml的Document对象)
- 解析xml,封装成BeanDefinition
- import标签(获得location,继续上述步骤)
- alias标签(向Map中保存alias->name的关系)
- bean标签
- 处理id、name属性(非空、重复等处理)
- 处理其他属性,保存至BeanDefinition中
- 处理子标签(propertity、list等)
- 向IOC中注册BeanDefinition
- 向IOC中的Map保存beanName->beanDefinition的映射关系
- 向IOC中的Map保存alias->beanName的映射关系
- 准备容器
- IOC 启动(obtainFreshBeanFactory())
IOC总结
IOC初始化入口从refresh()方法进入,obtainFreshBeanFactory()完后容器创建和bean定义的加载,其中加载bean定义由ResourceLoader来完成资源文件的定位,DefaultResourceLoader给出它的实现,可以通过类路径、文件路径、URL等方式来定位资源,最后封装成Resource对象,交由IOC处理。BeanDefinitionReader根据Resource来完成bean定义解析和bean定义注册,其中bean定义解析由BeanDefinitionParseDelegate完成并封装成BeanDefinition。然后BeanDefinitionReader完成第二步骤:注册Bean定义,注册的过程就是将其保存在IOC中的HashMap中,后续对bean的操作全都依赖该Map。
- DI
- AOP
- springMVC
- 本文链接:https://www.ofcoder.com/2019/11/09/java/spring%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/
- 版权声明:Copyright © 并发笔记 - ofcoder.com. Author by far.
分享