私が理解する限り、依存関係注入の主な目的は、すべての依存関係を宣言的に区切り、従属構造を簡単に見直して変更できるようにすることです。春のアノテーション基本的な質問
次に、依存関係の注釈をコード全体に広げて、非集中システム(単純な新しい演算子に似ています)に戻っていませんか?調整するのは難しいですか?
私が理解する限り、依存関係注入の主な目的は、すべての依存関係を宣言的に区切り、従属構造を簡単に見直して変更できるようにすることです。春のアノテーション基本的な質問
次に、依存関係の注釈をコード全体に広げて、非集中システム(単純な新しい演算子に似ています)に戻っていませんか?調整するのは難しいですか?
@Autowired
/@Inject
注釈通常こうしてそれでもBeanがコンテキスト内で宣言されている制御することにより、注入されるべき実装制御することができ、(new
の場合のように)インターフェイスではなく、具体的なクラスに依存関係を宣言する。また、これらの依存関係は手動でオーバーライドすることもできます。
@Component
-familyアノテーションは、コンポーネントスキャンから特定のクラスを除外できるため、同様に制御することができます。
依存性注入の目的は、依存関係の宣言をそれらの依存関係の実際の満足から切り離すことです。宣言がどのように行われているかは、直交問題です。
@Autowired
は、依存関係宣言の形式です。 @Autowired
を使用すると、カプセル化がサポートされます。クラスの注入依存関係は、別のファイルではなくコードに直接記述されています。
これらのタイプの議論は宗教的な傾向にありますので、私はこの主旨の定義と、そのパターンが本当に本当に満たされているかどうかの意味を明確にしていきます。
私はそれを特定の機能を提供できるツールのように見ようとします。たとえば、Spring(DI)を使用すると、インタフェースと実装を分離することができます。特定のインターフェースのユーザーは、実装の作成方法(または実装されている場所)を知る必要はありません。これはしばしば良いことです。 Springを使用することで、トランザクション処理、スコープ化、および他のフレームワークや技術への事前構築された統合のようなAOPやAOP主導の機能など、非常に多くのことが可能になります。注釈は、これをもっと簡単に、より明瞭に、そして最高のものにしています。実用的でない可能性がある場所でアノテーションを使用する必要はありません。XMLで構成するオプションは常にあります。
私はダムかもしれないが、私は完全に確信していない。 "...したがって、どのインプリメンテーションをコンテキスト内で宣言されているBeanを制御することによって注入すべきかを制御できます"。 xmlの設定と比べてそれほど柔軟ではありません。 – Kowser