您的位置:首页 > 其它

依赖注入 理解Dependency Injection

2015-11-27 10:49 375 查看
参考:

控制反转 wiki

依赖注入参考1,能极大促进理解

依赖注入参考2

定义:

In software engineering, dependency injection is a software design pattern that implements inversion of control for resolving dependencies.

Inversion of Control(IOC):控制反转。 是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

Dependency: ClassA 中 含有 ClassB 的实例,就称ClassA对ClassB有一个依赖。

Dependency Injection: 直接在构造函数初始化是一种Hard init方式。可以在外部实例化ClassB后,传入ClassA中构造依赖关系。这种非自己主动初始化依赖,而通过外部来传入依赖的方式,就称为依赖注入

硬初始化(hard init):这种在MovieLister中创建MovieFinderImpl的方式,使得MovieLister不仅仅依赖于MovieFinder这个接口,它还依赖于MovieListImpl这个实现。 这种在一个类中直接创建另一个类的对象的代码,和硬编码(hard-coded strings)以及硬编码的数字(magic numbers)一样,是一种导致耦合的坏味道,我们可以把这种坏味道称为硬初始化。

依赖注入的实现方式:

构造函数注入(Construction Injection)

public class MovieLister {
private MovieFinder finder;

public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}


setter注入

public class MovieLister {
public void setFinder(MovieFinder finder) {
this.finder = finder;
}
}


接口注入(不明白怎么注入的)

//1.首先要创建一个注入使用的接口。
public interface InjectFinder {
void injectFinder(MovieFinder finder);
}
//2.我们让MovieLister实现这个接口。
class MovieLister implements InjectFinder {
public void injectFinder(MovieFinder finder) {
this.finder = finder;
}
}
//3.我们需要根据不同的框架创建被依赖的MovieFinder的实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: