了解java中的DI

时间:2013-01-23 17:21:36

标签: java spring dependency-injection coding-style

  

可能重复:
  Understanding the need for a DI framework

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

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

提示和参考会做。感谢

2 个答案:

答案 0 :(得分:1)

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

编辑:忘记提及您可以使用工厂模式从代码中获取实现,但之后您只需将其移动到工厂中。 Spring就像一个巨大的,通用的所有豆类工厂。

答案 1 :(得分:1)

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

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

另请查看关于依赖注入的Wikipedia

  

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