在Spring参考中我们读到:
IoC也称为依赖注入(DI)。这是一个过程,通过这个过程,对象定义它们的依赖关系,即它们使用的其他对象,只能通过构造函数参数,工厂方法的参数,或者在构造或从工厂方法返回后在对象实例上设置的属性。
我理解正确吗?依赖是 -
1)他们使用的其他对象,只能通过构造函数参数,工厂方法的参数
2)在构造或从工厂方法返回后在对象实例上设置的属性
请举出这两个项目的简单例子和第二个问题 - 工厂方法是什么?请详细解释。
答案 0 :(得分:2)
依据该定义,依赖性是:
他们使用的其他对象
例如,假设你有这个类:
class Widget {
public void DoSomething() {
WidgetCalculator calculator = new WidgetCalculator();
int someValue = calculator.calculate();
// and so on...
}
}
在此设置中,Widget
依赖WidgetCalculator
。这是一个Widget
“与”{1}}需要的对象一起工作的对象,以便执行自己的工作。上面的代码完成了这项工作,但它导致紧密耦合。例如,你不能轻易地换掉Widget
的不同实现,打破一个类中的更改可能会破坏其他类等。
这是dependency inversion变得有用的地方。它不是创建 WidgetCalculator
的实例,而是需要一个。这可以很简单:
WidgetCalculator
现在为了执行操作,无论消费代码是什么,调用该操作都需要为class Widget {
public void DoSomething(WidgetCalculator calculator) {
int someValue = calculator.calculate();
// and so on...
}
}
提供依赖。如果Widget
上存在大量具有该依赖关系的代码,则可以将其提升为构造函数参数,以便消耗代码甚至无法创建 Widget
而不提供依赖性:
Widget
可以通过多种方式提供依赖关系,但核心原则是对象需要向其提供依赖关系,而不是寻找依赖关系本身。