什么是依赖注入? [复制]
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
【讨论】:
以上是关于什么是依赖注入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章