假设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控制调用有参数的构造器,由构造器来注入被依赖组件。就是所谓的构造器注入。