假设A组件依赖B组件

  1. 自己new一个。(主动)
  2. 找工厂去要一个。(主动)
  3. 等,等容器为我们提供一个被依赖组件。(被动) 传统模式下,无论是A去new一个B组件,还是通过工厂去获取B组件,都要需要A组件主动去获取被依赖的B组件。

用了Spring之后, Spring容器会负责把被依赖的B组件注入到A组件中,A只要被动地等待即可。

——此时A对B的控制关系,由原来的主动变成了被动,Johnson将之成为IoC(从A组件角度起名字)。

Martine Fowler —— IoC难理解,又给这个技术一个名字:依赖注入(DI,从Spring容器角度起名字)。

IoC和DI是同一个事情的两个不同说法。

依赖注入分为三种:

  • 接口注入:很少使用。
  • 设值注入:就是通过property元素控制调用setter方法,就是所谓的设值注入。
  • 构造注入:就是constructor-arg控制调用有参数的构造器,由构造器来注入被依赖组件。就是所谓的构造器注入。