正式创建Bean对象实例的过程
- 创建BeanFactory容器
- 加载配置文件,解析Bean定义信息
- 执行BeanFactoryPostProcessor (准备工作:准备BeanFactoryPostProcessor,广播器,监听器)
- 实例化操作
- 初始化操作
- 获取对象
引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。
IOC控制翻转名称由来:
软件系统在没有引入IoC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IoC容器之后,这种情形就完全改变了,由于IoC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IoC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
IoC容器的技术剖析
IoC中最基本的技术就是“反射(Reflection)”编程
我们可以把IoC容器的工作模式看做是工厂模式的升华,可以把IoC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。