目录
[死磕 Spring 1/43 ] — IOC 之深入理解 Spring IoC
第一部分 资源加载
[死磕 Spring 2/43] — IOC 之 Spring 统一资源加载策略
[死磕 Spring 3/43] — IOC 之 加载 Bean
[死磕 Spring 4/43] — IOC 之 获取验证模型
[死磕 Spring 5/43] — IOC 之 注册 BeanDefinition
[死磕 Spring 6/43] — IOC 之 获取 Document 对象
[死磕 Spring 7/43] — IOC 之解析Bean:解析 import 标签
[死磕 Spring 8/43] — IOC 之解析 bean 标签:开启解析进程
[死磕 Spring 9/43] — IOC 之解析 bean 标签:BeanDefinition
[死磕 Spring 10/43] — IOC 之解析 bean 标签:meta、lookup-method、replace-method
[死磕 Spring 11/43] — IOC 之解析 bean 标签:constructor-arg、property 子元素
[死磕 Spring 12/43] — IOC 之解析 bean 标签:解析自定义标签
[死磕 Spring 13/43] — IOC 之解析自定义标签 todo
[死磕 Spring 14/43] — IOC 之注册解析的 BeanDefinition
[死磕 Spring 15/43] — IOC 之 IOC 初始化总结
第二部分 bean 加载
[死磕 Spring 16/43] — IOC 之开启 bean 的加载
[死磕 Spring 17/43] — IOC 之从单例缓存中获取单例 bean
[死磕 Spring 18/43] — IOC 之parentBeanFactory 与依赖处理
[死磕 Spring 19/43] — IOC 之分析各 scope 的 bean 创建
[死磕 Spring 20/43] — IOC 之开启 bean 的实例化进程
[死磕 Spring 21/43] — IOC 之 Factory 实例化 bean
[死磕 Spring 22/43] — IOC 之构造函数实例化 bean (doCreateBean 1/4 : createBeanInstance)
[死磕 Spring 23/43] — IOC 之 属性填充 (doCreateBean 2/4 : populateBean)
[死磕 Spring 24/43] — IOC 之循环依赖处理 (doCreateBean 3/4 : 循环处理)
[死磕 Spring 25/43] — IOC 之 bean 的初始化 (doCreateBean 4/4 : initializeBean)
[死磕 Spring26/43] — IOC 之加载 bean:总结
第三部分 bean 的初始化 (学会init-method就可以)
[死磕 Spring 27/43] — IOC 之 深入分析 Aware 接口
[死磕 Spring 28/43] — IOC 之 深入分析 BeanPostProcessor
[死磕 Spring 29/43] — IOC 之 深入分析 InitializingBean 和 init-method
第四部分 BeanFactoryPostProcessor
[死磕 Spring 30/43] — IOC 之 深入分析 BeanFactoryPostProcessor
[死磕 Spring 31/43] — IOC 之 深入分析 PropertyPlaceholderConfigurer
[死磕 Spring 32/43] — IOC 之 PropertyPlaceholderConfigurer 的应用
[死磕 Spring 33/43] — IOC 之深入分析 PropertyOverrideConfigurer
第五部分
[死磕 Spring 35/43] — IOC 之自定义类型转换器
[死磕 Spring 36/43] — IOC 之分析 BeanWrapper
[死磕 Spring 37/43] — IOC 之 bean 的实例化策略: InstantiationStrategy
[死磕 Spring 38/43] — IOC 之 BeanDefinition 注册机:BeanDefinitionRegistry
[死磕 Spring 39/43] — Spring 的环境&属性:PropertySource、Environment、Profile
[死磕 Spring 40/43] — IOC 之 分析 bean 的生命周期
[死磕 Spring 41/43] — ApplicationContext 相关接口架构分析
[死磕 Spring 42/43] — 深入分析 ApplicationContext 的 refresh()
[死磕 Spring 43/43] — 4 张图带你读懂 Spring IOC 的世界
精华图示
Spring 五大部分
- Resource
- BeanFactory
- Beandefinition
- BeandefinitionReader
- ApplicationContext
Spring结构图
核心类1 BeanDefinitionParserDelegate
对应 xml 中的四种对象
精华描述
Spring 两个阶段
Spring 实现功能分为两个阶段:容器初始化阶段 、 bean加载阶段
- 容器初始化阶段: 首先通过某种方式加载Configuration Metadata(主要依据是Resource、 ResourceLoader 两个体系),然后容器会对加载的Configuration Metadata 进行解析分析,并将分析的信息组成BeanDefinition,并将保存注册到相应的BeanDefinitionRegistry中。至此,SpringIOC 的初始化工作就结束了。
- 加载bean阶段: 经过容器初始化后,应用程序中定义的bean已经全部加载到系统中了,我们显示或者隐式调用getBean()时候,会触发Bean的加载阶段。在此阶段,容器首先会检查所请求的对象是否已经初始化完成,如果没有,会根据注册的bean信息实例化请求对象,并为其注册依赖,然后将其返回给请求方,至此,加载bean完成。
测试代码
ClassPathResource resource = new ClassPathResource("bean.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);
doCreateBean 四个阶段
doCreateBean
- 一 createBeanInstance -------- bean 被创建出来,
- 二 populateBean --------属性注入
- 三 循环依赖处理 -------依赖处理
- 四 initializeBean --------初始化Bean
-
- 4.1 激活Aware方法
-
- 4.2 BeanPostProcessor ------ 后置处理器的应用
-
- 4.3 InitializingBean、init-method 激活自定义的init方法
系列文章 21、22、23、24、25 介绍 doCreateBean 的四个步骤
[死磕 Spring 21/43] — IOC 之 Factory 实例化 bean
[死磕 Spring 22/43] — IOC 之构造函数实例化 bean (doCreateBean 1/4 : createBeanInstance)
[死磕 Spring 23/43] — IOC 之 属性填充 (doCreateBean 2/4 : populateBean)
[死磕 Spring 24/43] — IOC 之循环依赖处理 (doCreateBean 3/4 : 循环处理)
[死磕 Spring 25/43] — IOC 之 bean 的初始化 (doCreateBean 4/4 : initializeBean)
系列文章 27、28、29 介绍 doCreateBean第四步 InitializeBean 的三个子步骤
4.1 激活Aware方法 -------------各种********Aware 接口及类
4.2 BeanPostProcessor ------ 后置处理器的应用
4.3 InitializingBean、init-method 激活自定义的init方法
扩展初始化bean
而初始化 bean 对象时也是干了三件事情,进行了三个检测扩展,也就是可以对bean进行三个不同的定制化处理:我们要学习第三篇 init-method ,详见 Test07InitializingBean 及配置文件
[死磕 Spring 29/43] — IOC 之 深入分析 InitializingBean 和 init-method
BeanFactoryPostProcessor 及其子类
知道 BeanFactoryPostProcessor 作用域容器启动阶段,可以对解析好的 BeanDefinition 进行定制化处理
BeanFactoryPostProcessor 作用于 bean 完成加载之后与 bean 实例化之前,是 Spring 提供的一种强大的扩展机制,他有两个重要的子类,一个是PropertyPlaceholderConfigurer,另一个是 PropertyOverrideConfigurer ,
其中 PropertyPlaceholderConfigurer 允许我们通过配置 Properties 的方式来取代 bean 中定义的占位符,
而 PropertyOverrideConfigurer 呢,改变现有对象的属性值。
[死磕 Spring 30/43] — IOC 之 深入分析 BeanFactoryPostProcessor
[死磕 Spring 31/43] — IOC 之 深入分析 PropertyPlaceholderConfigurer