最近接触了Spring、AngularJS,发现一个有趣的名称依赖注入,听起来非常高大上,一开始给蒙了,于是疯狂地Google,在几经波折后,终于有了一点感悟,现在把它记录下来,希望也能够给初学者一点提示.

概念(通俗易懂)

首先,理解下依赖,大白话说就是一个东西需要另一个东西,才能完成. 在Coding世界里,有一个类依赖另一个类,一个方法依赖另一个类方法等等. 注入就好比把某个东西注入到另一个容器中,合起来讲,依赖注入或者也可以叫注入依赖,就是把依赖注入到一个类中,即类中不直接写明依赖,而是通过传参等方式从外部引入.

例子(加深理解)

  • 背景 我们需要设计这样一个司机类,它需要依赖于各种车类. 我们也许会这样设计
public class Driver {	
	public drive() {
		//此处直接在类内部实例化对象
		Bus car = new Bus();
		car.run()
	}
}

利用依赖注入改进后的类.

public class Driver {
	public Car mcar;
	
	//通过set方法把依赖类,从外部注入
	public setCar(Car car) {
		mcar = car;
	}
	
	public drive() {
		car.run()
	}
}

为什么(非常重要)

任何一个东西的产生都有缘由,不可能无缘无故产生,人家西游记中的孙猴子怎么来的都有介绍,更何况依赖注入这么重要的东西;然而很多博文都直接介绍什么依赖注入,而没有道明为何有这个东西,即这个东西怎么来的. 导致我看了好多博文,都无法理解(也可能是我愚钝^_^). 下面我来阐述下,引入依赖注入,其实是为了更OCP化,即开闭原则 —— 对扩展开放,对修改关闭. 试想下上面的例子改进前的代码,假如我新增一个火车类,那么我就要修改Driver类,这就是违背了OCP原则. 而如果采用改进后代码,你就可以不用修改Driver类,只要创建一个继承于Car的火车子类,并通过set方法把火车类注入到Driver中.