DI是Dependency Injection缩写,我们翻译为“依赖注入”。简单的说,两个对象A->B(或者组件)依赖关系的建立,最好不要在编程时候确定下来,即不要通过new的方式确定依赖关系,这种方式会使系统失去可扩展性、可复用性等特点。当业务需求变化的时候,A不再依赖B而是依赖C(A->C)时候,new方式建立依赖关系的时候就不得不修改A,这是我们在系统设计中最不希望看到的情况。我们需要的是A->B还是A->C的依赖关系不是固定的、死的,而是灵活的、可变的。如果依赖关系能够推迟到运行期,动态的“注入”进来这样的设计才是我们希望的。这样我们就不需要通过修改A来改变依赖关系。DI(“依赖注入”)的设计思想,就是依赖关系推迟到运行期。
图1.28
图1.28是Spring框架实现DI的示意图,在图1.28中我们看到A对象依赖于B对象还是依赖于C对象是通过Spring 框架在运行期由BeanFactory读取applicationContext.xml文件而建立起来的,而不是在编程的时候通过new的方式确定下来的。
DI的思想在OOAD中早就有,Rod Johnson将DI的思想充分地融合到Spring框架设计之中。随着我们学习的深入你会发现Spring框架是多个Bean通过DI方式建立依赖关系,建立复杂的依赖关系网,如图1.29所示。上层Bean依赖下一层的Bean而且依赖关系又可以很容易的切换,而且上层Bean不需要修改任何的代码。
图1.29