IoC 是面向对象编程中的一种设计原则。
一、概念
控制反转( Inversion of Control,缩写为 IoC),是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI ),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个【调控系统内所有对象的外界实体】将其所依赖的对象的引用传递给它,也可以说依赖被注入到对象中。Spring 便是上文提到的【调控系统内所有对象的外界实体】抽象概念的一个落地实现。
二、举例说明
IoC (Inversion of Control),中文叫做控制反转。这是一个概念,也是一种思想。控制反转,实际上就是指对一个对象的控制权的反转。例如,如下代码:
@Data
public class Book {
private Integer id;
private String name;
}
@Data
public class User {
private Integer id;
private String name;
public void doSth() {
Book book = new Book();
book.setId(1);
book.setName("Java面试百宝袋");
}
}
在这种情况下,Book 对象的控制权在 User 对象里边,这样,Book 和 User 高度耦合,如果在其他对象中需要使用 Book 对象,得重新创建,也就是说,对象的创建、初始化、销毁等操作,统统都要开发者自己来完成。如果能够将这些操作交给容器来管理,开发者就可以极大的从对象的创建中解脱出来。
使用 Spring 之后,我们可以将对象的创建、初始化、销毁等操作交给 Spring 容器来管理。就是说,在项目启动时,所有的 Bean 都将自己注册到 Spring 容器中去(如果有必要的话),然后如果其他 Bean 需要使用到这个 Bean ,则不需要自己去 new,而是直接去 Spring 容器去要。