IOC
(Inversion of Control),即控制反转
,是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。IOC 是Spring
框架的核心思想之一。
传统的依赖关系和实现方式:
复杂对象包含简单对象,复杂对象的实现依赖于简单对象的实现,比如汽车包含轮子,汽车对象依赖于轮子对象,在汽车类的实现中会调用轮子类生成实例对象,这样的好处是在初始化时,底层的实现逻辑对于高层是隐藏的,易于开发,但是当我们需要修改简单对象时,就需要同时修改复杂对象,如果复杂对象的子对象多或层级多的时候,底层的改动就会牵一发动全身,修改工程量大。
关键在于,如何实现复杂对象和简单对象之间的解耦合呢?
首先我们要说一说依赖倒置原则
(Dependency Inversion Principle):
- 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。
- 抽象不应该依赖于细节,细节应该依赖于抽象。
复杂对象不直接创建简单对象,而是定义好接口,简单对象的实现依赖于接口定义;复杂对象决定需要什么,简单对象去实现这样的需求,但是复杂对象不需要了解简单对象是怎么实现的,类与类之间实现了解耦合;
控制反转
(Inversion of Control) 就是依赖倒置原则的一种代码设计的思路。具体采用的方法就是所谓的依赖注入(Dependency Injection)
依赖注入