目录
Spring Ioc
基础概念(什么是IOC)
1.依赖倒置
依赖倒置是指一种特定的接耦形式。通常来说依赖倒置会使高层的类不依赖底层次的类的具体实现,依赖的关系被反转过来,由底层次的类去依赖于高层次的类所需要的需求的抽象(接口)
举一个例子:
现在有一个数据源的类 Datasource,同时还有一个类MysqlConnect,MysqlConnect作为Datasource类的一个成员变量,此时相当于是Datasource对象依赖MysqlConnect对象,假如现在系统都是使用mysql作为数据库的话,那么现在的设计完全可以实现,没有任何问题。
现在我们提出一个假设,如果这个时候要把数据库改成redis呢?那Datasource类是不是有需要依赖一个新的RedisConnect类?这样的话每一次来新的需求我们都需要修改Datasource类,这个类根本就没办法复用,因为他的实现是依赖于下次对象的,只有确定了下层对象才能确定他自己。这样的设计类于类之间的耦合过于紧密
为了解决上面的问题,这个时候我们让MysqlConnect和RedisConnect都去实现一个抽象接口,而上层的Datasource类则依赖于这个抽象接口,这个时候无论下层接口怎么改变,对于上层来说都是一样的,上层只依赖于抽象接口,同时下层对象依赖于这个抽象接口,上层对象不再依赖于具体的下层对象了,依赖关系进行了反转,现在是由下层对象对于上层对象所需需求的抽象进行依赖了,这样子高层类和底层类之间进行了解耦,更容易拓展。
2.控制反转(IOC)
控制反转是一种设计思想,指的是将控制权利反转,这里的控制权指的就是对象的控制权,反转指的是将类内部创建对象的过程反转给到外部,由外部传入。对于Spring而言就是将对象的创建权利给到IOC容器,让IOC容器创建对象,再让IOC容器注入进来
3.依赖注入
依赖注入是IOC的具体实现方式,就是在外部生成对象以后通过set或者构造方法或者接口传递等方法将外部对象注入的过程
为什么要用到IOC
不使用IOC的情况下,对象的类都由程序员自己来控制,整个类的关联对象这些细节都需要程序猿掌控,项目中有成百上千的类,这样每次使用一个类的时候都需要自己去实例化每一个关联的对象,一层一层往下实例对象,还要弄清楚每一个对象的构造方法的含义,大大的增加了维护的难度。--难以维护和拓展
直接使用new创建对象,耦合性太高,如果下层对象发生改变,整个上层都会产生影响--耦合性太高