Abd*_*mon 10 java dependency-injection inversion-of-control
我正在观看有关依赖注入的课程视频,并且讲师讨论了di-container但没有详细解释,现在我读了一些文章,并且想确认一下我现在做对了。下面是简单的程序,我的问题是,
下面的Program类是最简单的di容器吗?如果不是这样的话,简单的di-container会怎么样
interface Implementable {
void doSmth();
}
class A implements Implementable {
@Override
public void doSmth() {
}
}
class B {
private Implementable i;
public B(Implementable implementable) {
this.i= implementable;
}
public void doSmth(){
i.doSmth();
}
}
Run Code Online (Sandbox Code Playgroud)
这是类双层容器吗?
class Program {
B b = new B(new A());
b.doSmth();
}
Run Code Online (Sandbox Code Playgroud)
根据依赖注入的原则,实践和模式,DI容器为:
一个软件库,提供DI功能,并可以自动执行与对象组成,拦截和生命期管理有关的许多任务。DI容器也称为控制反转(IoC)容器。(第3.2.2节)
至少,DI容器允许自动装配,即:
通过利用编译器和公共语言运行时提供的类型元数据,可以从抽象和具体类型之间的映射自动组成对象图。(第12.1.2节)
通常,这意味着DI容器将分析类型的构造函数并将依赖项注入其中,而无需手动指定每个构造函数参数。
从这个角度来看,您的Program课程不是 DI容器。Program充当您的复合根,即:
在模块中组合在一起的应用程序中(最好)的唯一位置。(第4.1节)
在您的特定“合成根”中,您正在练习Pure DI,这是一种使用new语言的关键字而不是使用DI容器来手动组成对象图的实践。