IoC 是面向对象编程中的一种设计原则。

一、概念

控制反转( Inversion of Control,缩写为 IoC),是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI ),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个【调控系统内所有对象的外界实体】将其所依赖的对象的引用传递给它,也可以说依赖被注入到对象中。Spring 便是上文提到的【调控系统内所有对象的外界实体】抽象概念的一个落地实现。

二、举例说明

IoC (Inversion of Control),中文叫做控制反转。这是一个概念,也是一种思想。控制反转,实际上就是指对一个对象的控制权的反转。例如,如下代码:

  1. @Data
  2. public class Book {
  3. private Integer id;
  4. private String name;
  5. }
  6. @Data
  7. public class User {
  8. private Integer id;
  9. private String name;
  10. public void doSth() {
  11. Book book = new Book();
  12. book.setId(1);
  13. book.setName("Java面试百宝袋");
  14. }
  15. }

在这种情况下,Book 对象的控制权在 User 对象里边,这样,Book 和 User 高度耦合,如果在其他对象中需要使用 Book 对象,得重新创建,也就是说,对象的创建、初始化、销毁等操作,统统都要开发者自己来完成。如果能够将这些操作交给容器来管理,开发者就可以极大的从对象的创建中解脱出来。

使用 Spring 之后,我们可以将对象的创建、初始化、销毁等操作交给 Spring 容器来管理。就是说,在项目启动时,所有的 Bean 都将自己注册到 Spring 容器中去(如果有必要的话),然后如果其他 Bean 需要使用到这个 Bean ,则不需要自己去 new,而是直接去 Spring 容器去要。

参考

  1. 控制反转词 @百度百科
  2. Ioc/DI @江南一点雨