1

可能重复:
了解对 DI 框架的需求

我已经阅读了几篇文章,并就 DI 与几位专业人士进行了交谈。我不明白的是如何通过 DI 解耦对象。以下文章还描述了一个场景,但我不明白 Spring 如何帮助解耦 PayrollApplication?解耦是通过多态性而不是 DI 完成的。DI 定义服务于其他目的......

http://www.developer.com/java/dependency-injection-in-existing-java-code.html

提示和参考就可以了。谢谢

4

2 回答 2

1

依赖注入解耦了对象,因为你没有直接实例化具体的类,Spring 正在为你做这件事。使用 DI 的替代方法是您通常会创建对接口的引用,但您仍然必须直接实例化对象。您的代码中仍然引用了 concreate 类。

编辑:忘了提到您可以使用工厂模式将实现从您的代码中取出,但是您只是将其移入工厂。Spring 就像一个巨大的、所有 bean 的通用工厂。

于 2013-01-23T17:28:06.067 回答
1

脱钩不是一个全有或全无的概念。在本文中,仅使用多态(“设计 2”)在一定程度上解耦了对象,但 PayrollApplication 类在编译 PayrollApplication 时仍然需要了解 Employee 的实现。

Employee 实现是 PayrollApplication 的依赖项,通过依赖注入,您可以实现更高级别的解耦:您可以编译 PayrollApplication 使其仅引用 Employee 接口,并仅提供 Employee 实现(可能由另一个团队/组织编写)之后。

另请查看有关依赖注入的维基百科:

依赖注入模式的主要目的是允许在运行时或通过配置文件而不是在编译时选择给定依赖接口的多个实现。该模式对于在测试时提供复杂组件的存根测试实现特别有用,但通常用于定位插件组件,或定位和初始化软件服务。

于 2013-01-23T17:57:37.973 回答