セッターインジェクションに対する ApplicationContextAware の利点は何ですか。セッターインジェクションを介して、Spring Container から Bean を取得することもできます。
4 に答える
ほとんどのシナリオでは、セッターインジェクションは完全に十分であり、インスタンス間の関係を維持するのに役立つより優れたソリューションを提供します。クラスはコンテナに直接依存しないため、つまり、Pojoであり、コンテナの存在を知る必要がないため、ユニットテストと将来の移民に多くの利便性がもたらされます。
コンテナから何かを取り出す必要がある場合、たとえば特定の種類のBeanを拡張する必要がある場合は、ApplicationContextAwareを使用します。一般に、特にビジネスオブジェクトの場合、ApplicationContextAwareを実装してクラスで手動で依存関係を取得することはお勧めしません。彼らは彼ら自身の組み立てに責任を負わないはずです。
それは2つの異なるパターンです。使用するApplicationContextAware
場合、Service Locatorパターンを実装しますが、セッターインジェクションは依存性注入パターンを指します。低結合アプリケーションを開発する場合は、後者の方が適しています。
これら2つのパターンの違いは、ここまたはここで説明されています
ApplicationContextAware
現在のコンテキストへの参照を取得すると、Bean の追加や削除など、編集できるようになります。一部のテスト シナリオを除いて、一般的にこれは悪い考えです。
ApplicationContextAware
Spring はまた、セッターを使用した単純な POJO よりも Spring フレームワークに依存していることを強調しています。
ApplicationContextAware
本当に必要な場合以外は使用しないでください。セッター/フィールド/コンストラクターの注入ですべてのビジネス ニーズをサポートできる場合は、使用しないでくださいApplicationContextAware
。
プロトタイプ スコープ Bean の新しいインスタンスを取得するために使用したくなるかもしれませんApplicationContextAware
(実際にBeanFactoryAware
は十分です)。しかし、そのためのより良いツールがありますlookup-method
。