2017-01-25 6 views
0

私は複数のstackoverflowの質問で、applicationContext.getbeanは悪い考えです。与えられた種類の豆を得るためのベストプラクティス

Why is Spring's ApplicationContext.getBean considered bad?

私は春に指定されたタイプの豆をスキャンするより良い方法があるかどうかを知りたいです。

私の使用例は、春の起動時に特定の型のBeanを取得し、それらのBeanでいくつかのメソッドを呼び出すことです。

私が知っていることから、これを行う方法は2つしかありません。

  1. Spring Beanにアプリケーションコンテキストをautowireし、appContext.getBeansOfTypeを使用します。
  2. フックポストプロセッサで、私はただ一種類の豆を処理するポストプロセッサにフックを感じる(タイプのBeanインスタンス)

がない場合は

によって指定されたタイプの私達の豆をフィルタリング良いアイデア。これは、すべてのBean初期化をインターセプトするためです。

誰かが私のユースケースを解決するより良いアプローチを提案できますか? (指定された型のgetBeans)

答えて

1

スプリングは、自動ハンドリングされたパラメータListの特別な処理を持っています。たとえば、Beanを指定した場合。このように:

@Component 
class MyBean { 
    @Autowired 
    MyBean(List<MyType> listOfMytype) { 

    } 
} 

その後、春には、タイプList<MyType>の豆のためにあなたのApplicationContextを検索しませんが、代わりにそれはMyTypeを実装し、リスト(which may suck if you actually want to get a list injected)としてそれらを注入しますすべてのBeanを検索します。したがって、指定されたタイプのすべてのBeanを取得します。

+0

答えに感謝します。もう一つ質問があります。この場合、applicationContext.getBeansOfTypeを使用する際に何が問題になりますか?コードを具体的なクラスに結合するのではありません。私たちは、それを抽象クラス(または可能であればインターフェース)に結合しています。この抽象クラスは、そのタイプのBeanのリストをautowiringすることによって、やっています。 – yaswanth

+0

@yaswanth:あなたがリンクしている質問には、はるかに良いと思います。私の驚いたことに、この質問の既存の回答のどれも、効果を見ることができる直接の例はありません。だから私は1つを追加しました:http://stackoverflow.com/a/41853545/327301 – yankee

関連する問題