在开发应用时,常常须要进行组件间的调用,这种依赖关系若是固化在组件设计中,就会形成依赖关系的僵化和维护难度的增长,Ioc容器就是让获取资源的方向反转,主动管理这些依赖关系,将这些依赖关系注入到组件中,会让这些依赖关系的适配和管理更加灵活。编程
一、接口注入数据结构
二、setter注入架构
三、构造器注入框架
BeanFactorypost
定义了Ioc容器的基本的形式;spa
提供了Ioc容器应该遵照的最基本的服务契约;设计
是咱们使用Ioc容器所应该遵照的最基本的编程规范;xml
典型的几个实现:接口
XmlBeanFactory生命周期
DefaultListableBeanFactory
编程的方式使用DefaultListableBeanFactory
Resource resource = new ClassPathResource("XmlBeanFactory.xml", getClass()); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); reader.loadBeanDefinitions(resource);
ApplicationContext
扩展了MessageSource接口,支持不一样的信息源,能够支持国际化的实现,为开发多语言版本应用提供服务
访问资源,体如今ResourceLoader对Resource接口的支持上,咱们能够从不一样的地方获得Bean的定义
支持应用事件
提供了一系列的附加服务,使得ApplicationContext与BeanFactory相比是一种面向框架的使用风格,企业级项目中,以ApplicationContext为Ioc容器的基本形态。
1)建立Ioc文件的抽象资源,其中包含了BeanDefinition的信息;
2)建立BeanFactory,这里使用了DefaultListableBeanFactory
3)建立BeanDefinition的读取器,这里使用 XmlBeanDefinitionReader来载入Xml文件形式的BeanDefinition,经过一个回调配置给BeanFactory
4)解析BeanDefinition,完成载入和注册Bean后,能够直接使用Ioc容器了。
资源定位
由ResourceLoader经过统一的Resource接口来完成
BeanDefinition的载入
将用户定义好的Bean表示成Ioc容器内部的数据结构
向Ioc容器注册 BeanDefinition,是调用BeanDefinitionRegistry接口完成的
预启动
设置启动时间
将active flag设置为true
初始化属性资源
检查必须的一些属性配置
2.建立DefaultListableBeanFactory
三、对BeanFactory进行一系列的设置
四、调用BeanFactory的后置处理器
五、注册BeanFactory的后置处理器
六、初始化MessageSource
七、初始化上下文中的事件机制
八、初始化一些比较特殊的Bean
九、检查监听Bean,并向容器注册这些Bean
十、实例化全部的(non-lazy-init)单例Bean
十一、发布事件,结束容器的启动
Bean实例的建立
为Bean实例设置属性
调用Bean的初始化方法
应用经过Ioc容器使用Bean
当关闭容器时,调用Bean的销毁方法
若是设置lazy-int属性时,依赖注入发生在Ioc容器的初始化的过程当中
lazy-int预实例化发生在 refresh()中的finishBeanFactoryInitialization中
Spring 在使用FactoryBean时,使用了工厂模式;
FactoryBean是Spring中的一个接口;
它提供了三个功能:
T getObject()
Class<?> getObjectType();
boolean isSingleton();
FactoryBean的生产特性 是在getBean中起做用的。
这个接口提供了两个功能能:
Object postProcessBeforeInitialization(Object bean, String beanName)
Object postProcessAfterInitialization(Object bean, String beanName)
Spring提供特定的aware接口实现Bean对Ioc容器的感知