依赖注入如何帮助在java中开发应用程序类

时间:2013-07-29 01:37:12

标签: dependency-injection

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

常规Java类:

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

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

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

这两个程序如何不同&我们在这里通过依赖注入最有用的是什么?

1 个答案:

答案 0 :(得分:2)

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

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 ...以便将它们用于{ {1}}调用) - 它不仅可以放松耦合,还可以使代码“更清晰”,更易于阅读和维护。

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