2

我是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;
           }
         }

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

4

1 回答 1

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 ... 以便将它们用于new调用)-不仅放松了耦合,而且使你的代码“更干净”,更容易阅读和维护。

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

于 2013-07-29T01:43:41.490 回答