什么是依赖注入? [复制]

Posted

技术标签:

【中文标题】什么是依赖注入? [复制]【英文标题】:What is Dependency Injection? [duplicate] 【发布时间】:2011-03-21 01:25:56 【问题描述】:

可能重复:What is dependency injection?

Spring 是 Dependency Injection 概念诞生的框架。

DI 的目的是什么?它有什么好处?它是如何实现的?

【问题讨论】:

代码中对DI最简单最清晰的解释:codeflex.co/java-dependency-injection-simple-example 【参考方案1】:

开始here。

另见A-beginners-guide-to-Dependency-Injection。 (已过时)

SO 的其他地方:

what-is-dependency-injection dependency-injection-vs-factory-pattern when-to-use-dependency-injection difference-between-dependency-injection-and-inversion-of-control

【讨论】:

基本上,不是让您的对象创建依赖项或要求工厂对象为它们创建一个依赖项,而是将所需的依赖项传递给构造函数或通过属性设置器,然后将其变成其他人的问题(依赖关系图上方的对象,或构建依赖关系图的依赖注入器)。我在这里使用的依赖项是当前对象需要引用的任何其他对象。 第一次阅读依赖注入时发现的另一个非常有用的链接:objc.io/issues/11-android/dependency-injection-in-java【参考方案2】:

DI 的目的是什么?

依赖注入的目的是减少应用程序中的耦合,使其更灵活、更容易测试。

它有什么好处?

对象没有硬编码的依赖关系。如果您需要更改依赖项的实现,您只需注入不同类型的 Object。

它是如何实现的?

依赖注入有多种方法。查看Wikipedia article 以查看每个示例。一旦你理解了这些,你就可以开始研究各种依赖注入框架了。

【讨论】:

嗨,你能告诉我:为什么当一个类依赖于另一个类时很难测试?读了很多关于这个,我仍然不明白为什么,比如说,A 类使用new 来声明 B 类会使测试变得困难。非常感谢。 @Unheilig - 测试类A 会很困难,因为您无法为测试指定B 的行为。请记住,您只想测试您的代码……而不是您的代码所依赖的所有代码。【参考方案3】:

很短,

DI 的目的是什么? 使用依赖注入,对象不自己定义它们的依赖,依赖注入到他们需要的地方。

它有什么好处? 对象不需要知道在哪里以及如何获取它们的依赖关系,这会导致对象之间的松散耦合,从而使它们更容易测试。

它是如何实现的? 通常,容器根据配置文件或注解来管理对象的生命周期及其依赖关系。

【讨论】:

嗨,你能告诉我:为什么当一个类依赖于另一个类时很难测试?在这方面读了很多,我仍然不明白为什么说 A 类使用 new 来声明 B 类会使测试变得困难。非常感谢。 @Unheilig youtube.com/watch?v=hBVJbzAagfs【参考方案4】:

试试看:http://martinfowler.com/articles/injection.html

【讨论】:

【参考方案5】:

DI 允许我们更换组件、提高可测试性并确保组件松散耦合。 DI 允许在运行时使用 DI 容器解决依赖关系,例如 Windsor Castle、Unity、Spring.net、MEF,这些容器允许应用程序可扩展。

【讨论】:

【参考方案6】:

http://en.wikipedia.org/wiki/Dependency_injection

【讨论】:

以上是关于什么是依赖注入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

依赖注入

依赖注入究竟有啥好处?

从头认识Spring-1.1 什么是依赖注入?为什么须要依赖注入?

依赖注入是怎么回事

PHP如何实现依赖注入

什么是依赖注入 IoC