我目前正在处理一个Java项目。我对Java还很陌生。我过去做过C++/C#。
我有一个关于依赖注入的问题。为什么使用它的基本想法我已经很清楚了
public class MyClass
{
@Inject
private IFoo fooInterface;
@Inject
private Bar barClass;
}
带有
public interface iFoo
{
}
public class Bar
{
}
现在,注入一个实际的接口实现来减少依赖关系是完全合理的。
但我为什么要注射一种";正常的";具有的类没有实现接口?
你能帮我理解吗?
编辑:谢谢大家的评论。我相信我现在已经明白了依赖注入背后的想法。
只是澄清一下:在与其他开发人员交谈后,我被告知在我们的项目中,所有注入的依赖项都是在启动时构建的。但是,并非所有成员对象在启动时都是已知的。因此,这些成员对象不能通过构造函数传递。
另一点是,对于每个类类型(例如Bar(,整个项目只需要构建1个实例接缝,该实例将在整个项目中传递并由多个线程访问。因此,如果我们使用成员变量,我们可能会遇到并发问题。
=>我们团队的结论是避免成员变量,并将所有参数作为函数参数传递。
=>现在,我正在寻找一种方法来获得DI(这非常有意义(,但也有成员变量。
使用依赖项注入时,类将创建其依赖项的责任委托给依赖项注入系统。因此,您永远不想自己实例化依赖项。
否则,如果您的Bar
类需要依赖项,那么您也必须在MyClass
中处理它们。如果在许多地方使用Bar
并添加依赖项,那么也必须更改Bar
的所有用法。