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

これら 2 つのプログラムの違いと、依存性注入によってここで得られる最も有用なものは何ですか?

4

1 に答える 1

2

提供された例では、実際にはそれほど違いはありません。しかし、ポイントを証明するためにあなたの例を少し変更することができます:代わりにインスタンス化する場合を想像してください:

spellChecker = new SpellChecker();

あなたがしなければならなかった:

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

私が言おうとしているのは、SpellChecker をインスタンス化するためにいくつかのパラメーターが必要な場合、パラメーターを作成する必要があるため、2 つのクラスのコードが結合されるということです: x、y、z、a、b、 c (そして、それらが複雑な場合は、再帰的に掘り下げる必要があります...)。ここで、誰かが SpellChecker のコンストラクターの実装を変更すると、クラスが壊れてしまいます!

さらに、SpellChecker は、たとえば、EnglishSpellChecker、ItalianSpellChecker など、毎回異なるクラスによって実装されるインターフェイスである可能性があります。クラスに実装されているコードは、現在どの実装が使用されているかを「気に」すべきではありません。知っておくべきことは、このクラスがインターフェイス SpellChecker を実装し、それによってどのメソッドを使用できるかということです。これにより、カプセル化とポリモーフィズムという OOP の 2 つの重要な特性が維持されます。

newDI を使用すると、上記のようなケースの処理 (呼び出しに使用するためにパラメーター a、b、c ... を作成する) から作成されたボイラープレートなしで、現在のクラスが実行する必要があるタスクに集中できます。結合を緩めるだけでなく、コードを「よりクリーン」にし、読みやすく、保守しやすくします。

もう 1 つの側面は、Spring がオブジェクト (Bean) のライフサイクルを管理できるようにすることですが、それは別の話です ;)

于 2013-07-29T01:43:41.490 に答える