控制反转:依赖关系的转移,表现在高层模块不应依赖于底层模块,而模块都必须依赖于抽象;实现必须依赖于抽象,而不是抽象依赖于实现;应用程序不应该依赖于容器,而容器应该服务于应用程序。
依赖注入:保留抽象接口,让组件依赖于抽象接口,当组件要与其他实际的对象发生依赖关系时,由抽象接口来注入依赖的实际对象。
依赖注入实现控制反转的三种方法:Interface injection、Setter injection、Constructor injection. Interface injection 需要程序和容器实现接口,使程序依赖于容器的接口,此种注入方式使用少,Setter injection 有明确的方法名称用于了解注入对象的作用和类型;Constructor injection 在创建对象的使用就可以完成对象的注入,但当注入的的对象较多时,会有较长的参数。