【问题标题】:how dependency injection helps to develop application classes in java [duplicate]依赖注入如何帮助在java中开发应用程序类[重复]
【发布时间】:2013-07-28 16:46:20
【问题描述】:

我是 java 中“Springs 框架”的新手。我想清楚地了解依赖注入。

常规 Java 类:

      public class TextEditor {
          private SpellChecker spellChecker;
          public TextEditor() {
          spellChecker = new SpellChecker();
            }
      }

使用依赖注入(Springs)的Java类:

    public class TextEditor {
         private SpellChecker spellChecker;
         public TextEditor(SpellChecker spellChecker) {
         this.spellChecker = spellChecker;
           }
         }

这两个程序有何不同以及我们通过依赖注入在这里获得的最大用处是什么?

【问题讨论】:

    标签: dependency-injection


    【解决方案1】:

    在提供的示例中,它确实看起来并没有太大的不同。但我可以稍微改变你的例子来证明一个观点:想象一下,如果实例化:

    spellChecker = new SpellChecker();
    

    你必须这样做:

    spellChecker = new SpellChecker(x,y,z,a,b,c);
    

    我想说的是,如果您需要一些参数来实例化 SpellChecker,那么这两个类的代码将变得耦合,因为您必须创建参数:x,y,z,a ,b,c (如果它们很复杂,那么你必须递归地挖掘......)。现在,如果有人更改了 SpellChecker 中构造函数的实现 - 它会破坏您的课程!

    此外,SpellChecker 可能是一个接口,每次都由不同的类实现,例如:EnglishSpellChecker、ItalianSpellChecker 等。在您的类中实现的代码不应该“关心”当前使用哪个实现 - 所有它“需要知道”的是这个类实现了接口 SpellChecker 以及可以使用哪些方法。通过这样做,您将维护 OOP 的两个重要特征:封装和多态性。

    使用 DI 可以让您专注于当前类必须完成的任务,而无需通过处理上述案例创建的样板文件(创建参数 a、b、c... 以便将它们用于 @ 987654323@ call)- 不仅可以放松耦合,还可以让你的代码“更干净”,更容易阅读和维护。

    另一个方面是它让 Spring 管理对象(bean)的生命周期 - 但这是另一回事;)

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多