2011-09-16 7 views
48

私はDaemonタイプのオブジェクトのリストを持つ1つのクラスを持っています。タイプ別リストへのリファレンスBeanの自動バインド

class Xyz {  
    List<Daemon> daemons; 
} 

私の春の構成は次のようになります。

<bean id="xyz" class="package1.Xyz"> 
    <property name="daemons" ref="daemonsList"> 
</bean> 

<bean id="daemon1" class="package1.DaemonImpl1"/> 
<bean id="daemon2" class="package1.DaemonImpl2"/> 

<bean id="daemonsList" class="java.util.ArrayList"> 
     <constructor-arg> 
      <list> 
       <ref bean="daemon1" />  
       <ref bean="daemon2" /> 
      </list> 
     </constructor-arg> 
</bean> 

は今の代わりに明示的にリスト内の各デーモンの実装を配線するのではなく、リストに自動的にタイプDaemonのすべてのBeanをautowireすることが可能です。私が解決しようとしている問題誰かがDaemonクラスの新しい実装のBeanを作成し、それをリストに忘れた場合。

私はこの質問をどこかでstackoverflowに見ましたが、それを再び見つけることはできません。それについての謝罪。

+2

http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception/1363435#1363435 – skaffman

+0

Thanks skaffmenを参照してください。私はここに関わるコンセプトを理解しようとします。 – RandomQuestion

答えて

54

それは、この(あなたのXMLからArrayListにBeanを削除します)のように動作するはずです:私はXMLでこれを行う方法はないと思う

public Class Xyz {  

    private List<Daemon> daemons; 

    @Autowired 
    public void setDaemons(List<Daemon> daemons){ 
     this.daemons = daemons; 
    } 

} 


参照: 3.9.2. @Autowired and @Inject

は は、その配列を期待するフィールドまたはメソッドにアノテーションを追加することによって のApplicationContextから特定のタイプのすべての豆を提供することも可能ですタイプ:

public class MovieRecommender { 

    @Autowired 
    private MovieCatalog[] movieCatalogs; 

    // ... 
} 

同じ型付きコレクションに適用されます。ところで

public class MovieRecommender { 

    private Set<MovieCatalog> movieCatalogs; 

    @Autowired 
    // or if you don't want a setter, annotate the field 
    public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) { 
     this.movieCatalogs = movieCatalogs; 
    } 

    // ... 
} 

、春4.xでは、these lists can be ordered automatically using the @Ordered mechanismのよう。

+5

ありがとうSean。出来た。私は、 '@ Autowired'表記を' List daemons'に追加すると 'java.util.List'型のBeanを春に検索すると思っていました。驚くべきことに、リスト内のオブジェクトのタイプを見つけてリストに配線し、最終的に主要オブジェクトにリストする方法です。 – RandomQuestion

+0

@al。問題ありません。私はこの機能を多く使っています –

+0

"List デーモン"をautowiringするとき、これは汎用型で実行時には利用できないので、SpringはDaemon型のBeanを探すべきですか? – elyor

関連する問題