Spring 3でアプリケーションコンテキストを注入するためのベストプラクティス
-
11-12-2019 - |
質問
上記のタイトルのように、私はPressContextを直接@autowired annnotationで注入すること、またはシングルトンスプリングBeanのApplicationContextextextawareインタフェースを実装するのを混乱させています。
どのケースがどちらを望んでいますか?ありがとう。
解決
実際には、両方が悪いです。どちらもあなたの申請を春の枠組みに結び付け、反転の概念全体を反転します。理想的な世界では、あなたのアプリケーションはApplicationContextがまったく管理されていることを認識してはいけません。
この原則に違反することを選択したら、それはどのようにあなたがそれをするかには関係ありません。ApplicationContextAware
は、 at ml atmlixex.html"ther">バージョン2.0 以来最小のもの。@Autowired
は新しいメカニズムですが、ほとんど同じように機能します。意味的にそれが何であるかを明確にするので、私はおそらくApplicationContextAware
で行くでしょう。
他のヒント
@sean Patrick Floydは、ApplicationContextの必要性が悪いデザインによるものです。しかし、時々あなたは他の選択肢を持っていない。そのような場合、私は@Autowiredの使用を好むので、他のすべてのプロパティを注入する方法です。そのため、MyRepositoryを注入するために@Autowiredを使用している場合は、なぜApplicationContextまたは他のスプリングBeanに使用できないのですか?
私は注釈を使えないものだけ、たとえばBeanNameaware。
シングルトンでプロトタイプを入手する必要がある場合は、メソッド射出を使用できます。基本的には、必要なオブジェクトを返す抽象メソッドを作成し、そのメソッドを呼び出すたびにPrototypeを返します。Spring Configの "lookup-method"を定義します。いくつかのリンクがあります。 http://docs.spring..io / spring / docs / 1.2.9 / reference / beans.html#beans-factory-method-expection http://java.dzone.com/articles/method-injection-spring
あなたは以降のスプリングクラスのいずれかを拡張していないので、アプリケーションは常にフレームワークから分離されています。ほとんどの場合、ApplicationContext
を挿入したくないが、ApplicationContext
で定義されているBeanを注入する必要があります。
最良の場合は、常に最低限のもの、そして特定の要件がない限り、これは春と非常に単純なものに固執することです。
だから
-
scan
でBeanとapplication context
を注釈してから、@Autowire
を使用してそれらを上に配線します。 -
application context
を使用してBeanの担当者を配線します(古いXMLスタイルの設定)。このアプローチで@Autowire
も使用できます。豆のライフサイクルを制御したいときは、APIを読み、カスタマイズできますが、これらの一般設定はジョブを実行します。
これはいくつかの例です。