こんにちは、私は String の初心者で、Martin Fowler の記事を読んでいます: http://martinfowler.com/articles/injection.html
彼は、映画を見つけるために MovieFinder を使用する MovieLister の例を挙げました。この例では、彼は最初にコードを提供しました。
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
}
彼は、友人が同じ MovieFinder 実装を使用し、ムービーを同じ txt ファイルに入れていない限り、MovieLister を再利用するために友人に渡すことはできないと指摘しました。
はい、もちろん、これは誰かが再利用できることを期待してコンポーネントを作成する方法ではありません。代わりに、彼が進行するにつれて、次のように書く必要があります。
class MovieLister...
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
はい、そのほうがいいです。これで、友人が MovieLister を引き継いで、自分のコードをプラグインできるようになります。私にとって、物語は完結しています。依存関係を注入するために Spring フレームワークが必要な理由がわかりません。依存関係は、友人のコードによって MovieLister に注入されます。完全停止。すべての Spring セットアップは、単純に MovieFinder インターフェースを実装してそのような呼び出しを行うことと同等です。
MovieFinder myMovieFinder = new MyMovieFinderImpl();
MovieLister myMovieLister = new MovieLister(myMovieFinder);
シンプル、簡単。コードで MyMovieFinderImpl インスタンスの作成をハードコーディングしていることは知っています。しかし、これを XML に移行したのに、他の多くのものを持ち込むことに何の意味があるのでしょうか? いつからプログラマーはコードをコンパイルするのが怖くなり、すべてを完了するためにコンパイルせずに XML を変更することを好むようになったのでしょうか? 申し訳ありませんが、私は要点を見逃していると思います。すべてのプログラムは、何十年も前に依存性注入を使用しています。しかし、昔は、ライブラリ、DOS コマンド ライン、または GUI を使用して、プログラムによって依存関係が注入されていました。なぜ今、依存性を注入するためにさらに別の方法が必要なのでしょうか?
ありがとうございました。
更新しました:
さて、皆さんの多くが注釈を持ち出しました。Spring についての私の浅薄な理解では、注釈よりも XML を使用する方が快適に感じるかもしれません。少なくとも、より簡単に理解できるように、依存関係がどのようになっているのかを一覧表示する中心的な場所があります。注釈があれば、そのような中心的な場所はありません。代わりに、魔法が起こっているだけです。パラメータとして何が渡されるか知りたいですか? 自分でそれを理解し、頑張ってください。はい、コードのナビゲートに役立つスマート IDE プラグインがあることは知っています。しかし、そもそもあることを複雑にして、生活を楽にする別のことを祝うのはなぜでしょうか? 注釈によってコードの閲覧や理解が難しくなるため、人々がそのために IDE プラグインを作成するという事実は、そもそも不必要なものを作成する可能性があることは明らかですよね?