首先什么是IOC?
控制反转:把创建对象的权利交给Spring
依赖注入:
何为依赖,依赖什么?
程序运行需要依赖外部的资源,提供程序内对象的所需要的数据、资源。
何为注入,注入什么?
配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后就把这些资源注入给程序内的对象,维护程序内外对象之间的依赖关系。
所以说,控制反转是通过依赖注入实现的。但是你品,你细品,它们是有差别的,像是[从不同角度描述的同一件事]:
Ioc是设计思想,DI是具体的实现方式;
Ioc是理论,DI是实践;
从而实现对象之间的解耦。
在类中需要使用的对象,通过反射从第三方容器注入得到而不是自己创建,这个第三方容器就是spring.
现在来比较具体的说一下IOC是什么?
传统的干活方式:在对象单一职责的基础上,一个对象很少有不依赖其他对象而完成自己的工作,所以这个时候就会出现对象之间的依赖。而体现在我们的开发中,就需要什么对象,就创建对象,当对象创建太多的时候,就会出现一个对象更改,就得更改依赖他的对象,耦合性大。(这样有了自主性,耦合性却变得很大)
我们会想,能不能我们在用的时候直接那这个对象去用,将创建对象的能力交给第三方。把控制权交给第三方,这个时候如果需要使用这个对象,就从容器注入这个对象。
怎么使用IOC?
(1)通过XML文件
(2)Annotation
IOC的过程:
执行过程:
加载配置文件,初始化系统环境Environment接口
准备上下文环境,初始化一些配置资源
创建一个工厂
为工厂添加各种环境
获取子类自己重写的BeanFactoryPostProcessor
执行容器和我们自己的BeanFactoryPostProcessor
注册BeanPostProcessor
国际化处理
转播器
子类初始化Bean
注册监听器,观察者模式
完成Bean创建
发布相应的事件,监听器
对象创建的时候:在spring容器启动的时候就要创建好所有的对象。
理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
深入理解IOC:
注意:一定要生成set()方法,因为springIoc就是通过这个set方法注入的。