站在设计者的角度考虑设计IOC容器
- 加载Bean的配置(比如xml配置)
- 比如不同类型资源的加载,解析成生成统一Bean的定义
- 根据Bean的定义加载生成Bean的实例,并放置在Bean容器中
- 比如Bean的依赖注入,Bean的嵌套,Bean存放(缓存)等
- 除了基础Bean外,还有常规针对企业级业务的特别Bean
- 比如国际化Message,事件Event等生成特殊的类结构去支撑
- 对容器中的Bean提供统一的管理和调用
- 比如用工厂模式管理,提供方法根据名字/类的类型等从容器中获取Bean
一、IOC初始化流程图
Class (UserService)—>实例化 —> 对象 ---->属性填充(依赖注入)-----> 初始化(实现InitializingBean) ---->AOP -->代理对象 -----> bean
1.1、如何将Bean从XML配置文件解析后放到IOC容器中;
背景:
SpringIOC容器它会以某种方式,加载配置文件中的 信息,将其解析为一个个的BeanDefinition.之后将BeanDefinition注册到容器之中。Spring IOC容器在实现的时候经过的过程可以使用如下图片表示
分为两个主要部分:
其一 :容器启动阶段
其二:bean实例化阶段。
在容器的启动阶段主要做的是一些信息收集的过程(主要依赖于工具类BeanDefinitionReader),将收集的信息组成BeanDefinition.将BeanDefinition注册到相应的BeaneanRegistry。
Bean实例化的过程在请求方通过容器的getBean方法明确请求某个对象时候触发/隐式依赖关系调用时候也会触发该动作。此阶段做的操作主要是判断当前的请求对象是否已经被实例化过了。根据情况进行注入,当该对象实现某些回调接口,也会根据回调函数接口装配它。
目标:
分析Spring如何将配置文件解析,(以XML配置文件为例)通过加载解析,生成BeanDefination 并注册到IOC容器中;