控制反转定义

时间:2015-01-22 18:26:43

标签: java spring inversion-of-control

在Spring参考中我们读到:

  

IoC也称为依赖注入(DI)。这是一个过程,通过这个过程,对象定义它们的依赖关系,即它们使用的其他对象,只能通过构造函数参数,工厂方法的参数,或者在构造或从工厂方法返回后在对象实例上设置的属性。

我理解正确吗?依赖是 -

1)他们使用的其他对象,只能通过构造函数参数,工厂方法的参数

2)在构造或从工厂方法返回后在对象实例上设置的属性

请举出这两个项目的简单例子和第二个问题 - 工厂方法是什么?请详细解释。

1 个答案:

答案 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

可以通过多种方式提供依赖关系,但核心原则是对象需要向其提供依赖关系,而不是寻找依赖关系本身。