我也用我的话说说我的理解。
代码中的各种引用就会产生依赖。
原先用什么就在代码里声名什么,这样依赖是广泛的,任何改动丢要重新修改代码。
所以,不方便。
后来,流行工厂方法,不依赖具体类,只需要一个工厂,都准备好了。可是,这样就依赖于工厂了。如果有变动,就要修改工厂的代码。
所以,还不够理想。理想的方案是不修改代码,改变依赖之需要修改配置文件。
也就是,实现运行时依赖,而不是编译时依赖。这就是依赖注入的本质。
依赖注入DI(这是个方法),目的是实现依赖关系的完全解耦,也就是实现控制反转IoC(这是个理念)。
依赖注入就是通过IoC容器实现的一种自动依赖生成,你只需要配置依赖的字面关系,具体操作IoC容器自动完成。
Spring推荐使用的是:1、Setter 2、构造器(构造子)
关于两者的使用情景略有区别,夏昕那个文档有介绍。
用setter还是constructor。
如果依赖在生命周期不变就constructor,变就用setter。
DI实现的方式,流行的Spring实现了前两种,前两种DI都是IoC的实现。
1)通过set方法(Spring中常用这个玩意)
2)通过构造函数
3)参数传递(应该很早就开始应用了)
有时觉得很有意思,为了解决耦合性,把很多信息都放到配置文件中了,这样管理配置文件的问题会越来越大,复杂度也会变大。