2017-10-20 6 views
0

では避けるべきであるなぜ私は春のドキュメントを通過し、あなたが、あなたの豆のインスタンスを取得するためにgetBeanを使用することができます getBean()は春アプリケーション

以下、文に出くわしました。 ApplicationContextインターフェイスには のBeanを取得するためのいくつかのメソッドがありますが、アプリケーションコードでは を使用しないことが理想的です。 実際には、アプリケーションコードには getBean()メソッドがすべてであるため、 のSpring APIには依存しません。たとえば、SpringのWebフレームワークとの統合では、 コントローラやJSF管理BeanなどのさまざまなWebフレームワークコンポーネントへの依存性注入が提供され、 注釈などのメタデータを使用して特定のBeanに依存性を宣言できます。私のアプリケーションで

REF- https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html

、私はインターフェイスの適切な実施を注入し、それに基づいて、私のクライアントの方法にいくつかのパラメータを受け取ります。 私がやる方法は、これらのパラメータを連結した後にBean IDを検索することです。 たとえば、type=CsubType=Dを受け取った場合、getBean(beanId)を呼び出してbean id=typeCsubTypeDのBeanを取得します。 つまり、私の依存関係は実行時に決定されます。

は私がWhy is Spring's ApplicationContext.getBean considered bad?

通過した。しかし(また、その問題のコメントによって対処される)、これは私のユースケースをカバーしていません。

+0

興味深い質問がありますか?コードを共有できますか?どのようにパラメータが入ってくるのですか? – Andrew

+0

私のプロジェクトは別のアプリケーションでjarライブラリとして使用されます。そのアプリケーションはこのjarのメソッドを呼び出します。今度は、どのパラメータを渡すかに基づいて、Beanを選択して結果を生成する必要があります。 – Deb

答えて

1

一般的に私のアドバイスは、今月の狂気の狂気を避けることです。

今日では、制御の反転が非常に多く(SOLID設計原理の一部として)誇大広告なので、誰もがその原則に反するものを使用している場合、人々は盲目的にそれをbashの、あなたはそれを使用して避けるべきであると述べています。しかし、本当の答えは、ソフトウェア設計に関しては普遍的な法律がないということです。アプリケーションで制御の反転を使用しないという正当な理由がある場合は、getBean()を使用しても問題ありません。基本的には、は、を意味しています。「代わりに制御の反転を使用できる静的初期化コンテキストではgetBean()を使用しないでください。

たとえば、Springを「beanスクリプト言語」として使用するアプリケーションでは、非開発者が本格的なDSLを使用せずに構成可能なJava Beanを定義できるようにしています。その点でSpringを使用している場合、getBean()の使用を避けることはできません。

+0

getBean()はどのようにIoCに逆らっていますか?なぜなら、Springコンテナ(従属クラスではない)を使用してBeanを作成し、実行時にBeanを取得しているからです。コンパイル時に依存関係は解決されません。 – Deb

+1

コンテキスト自体が注入されない限り、 'ApplicationContext'に頼っているので、コンテキスト自体を取得する方法を知る必要があるため、もはや完全にIoCではありません。あなたがサービスロケータとIoCの違いについてリンクした記事の下で良い議論があり、あなたが言及したユースケースは、純粋なIoCよりもサービスロケータのほうが多いです。 –

関連する問題