IOC的概念和原理
目录
IOC的概念和原理
1.什么是IOC
(1)控制反转:
(2)使用IOC的目的:降低耦合度
(3)IOC解耦过程图解
2.IOC的底层原理
3.IOC接口
(1)IOC思想
(2)Spring提供IOC容器实现两种方式:(两个接口)
4.ApplicationContext 接口的实现类
两个实现类的区别
1.什么是IOC
(1)控制反转:
IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想
控制:IOC意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部直接控制;
IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;
谁控制谁?当然是IOC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;
反转则是由IOC容器来帮忙创建及注入依赖对象;
由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
IOC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;
有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
其实 IOC 对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在 IOC/DI 思想中,应用程序就变成被动的了,被动的等待 IOC 容器来创建并注入它所需要的资源了。
示例图:
(2)使用IOC的目的:降低耦合度
用伪代码来比较:用工厂类来做例子(注意:工厂类不是IOC模式)
原始方式:一个类调用另外一个类的对象使用
升级后:工厂模式解耦,但是也不是完全解耦
(3)IOC解耦过程图解
可能一时半会看不懂图,但是通过后面深入理解就会豁然开朗
IOC的思想就是我们仅仅通过修改XML配置文件的对象路径,就可以轻松把对象创建出来去被别的类进行调用
2.IOC的底层原理
(1)xml解析、工厂模式、反射
3.IOC接口
(1)IOC思想
基于IOC容器完成,IOC容器底层就是对象工厂
(2)Spring提供IOC容器实现两种方式:(两个接口)
第一种: BeanFactory ,可以对IOC容器基本实现,是Spring 内部的使用接口,不提供开发人员进行使用
【加载配置文件的时候不会创建对象,在获取对象(也就是说在使用的时候)才会去创建对象】
第二种:ApplicationContext,是BeanFactory 接口的子接口,提供更多强大的功能,一般由开发人员使用
【加载配置文件的时候会把在配置文件中的对象进行创建】
*一般推荐使用第二种,因为Spring框架,要结合web项目进行操作,通俗点来说就是用tomcat服务器进行启动,因此把这些耗时耗内存的都在项目启动的时候进行处理更加合适
操作步骤:将ApplicationContext 改为 BeanFactory 【实验结果不变】
4.ApplicationContext 接口的实现类
查看的操作步骤如图:
打开实现类
两个实现类的区别
一个读取类路径下,绝对路径
一个读取文件路径,相对路径