1、Spring 的 IoC 容器是一个提供IoC支持的轻量级容器,除了基本的 IoC 支持,还提供了相应的 AOP 框架支持、企业级服务集成等服务。Spring提供了两种容器类型:BeanFactory 和 ApplicationContext。
2、容器的作用,是以某种方式加载 Configuration Metadata(通常也就是XML配置信息),然后根据这些信息绑定整个系统的对象,最终组装成一个可用的基于轻量级容器的应用系统。
3、容器的实现以上功能的过程,可以分为两个阶段,即 容器启动阶段 和 Bean 实例化阶段。
4、以下对两个阶段内容做简单介绍,详细的执行流程请查看
一、容器启动阶段:
1、资源加载,通过某种途径加载 Configuration MetaData(配置信息)
2、解析配置信息,封装为 BeanDefinition(bean 的描述信息,用于实例化)
3、注册 BeanDefinition 到 BeanDefinitionRegistry (其实就是保存解析好的 BeanDefinition)
4、插手“容器的启动”,Spring提供了一种BeanFactoryPostProcessor的容器扩展机制,该机制允许我们开发者在容器实例化对象之前,对注册到容器中的 BeanDefinition 进行修改
final、该阶段为准备性阶段,侧重于对象管理信息的收集
二、Bean 实例化阶段
start、通过调用容器的 getBean("xxx") 明确请求获取某个对象,触发该阶段
1、检查所请求的对象是否已经初始化过,初始化过且为单例,直接返回对象
2、未初始化过,则根据对应的 BeanDefinition 提供的信息实例化该对象
3、设施对象属性,为该对象注入依赖对象,如果依赖的对象未实例化,则想递归实例化依赖的对象
4、如果对象实现了某些回调接口,则根据回调接口的要求来装配它
5、BeanPostProcessor 会处理容器中所有符合条件的实例化后的对象,提供了连个接口分别在不同的时机执行
6、对象实例化成功后,直接返回对象(如果是单例,这保存对象)
三、写在最后