2011-08-21 7 views
9

Springフレームワークは、注釈主導の方法でコレクションを挿入することを可能にしますか?

注釈駆動型注入を使用して同じことを実行することは可能ですか?

 
<beans> 
... 
    <bean id="interceptorsList" class="com.mytest.AnyAction"> 
     <property name="interceptors"> 
      <list> 
       <ref bean="validatorInteceptor"/> 
       <ref bean="profilingInterceptor"/> 
      </list> 
     </property> 
    </bean> 
</beans> 

注釈駆動型注入を使用して同じことを実行できますか?

答えて

4

良い質問 - 私はそう思わない(「注釈駆動型注入」とは、AnyActionの注釈を参照していると仮定します)。

それは次のように動作するかもしれないことは可能ですが、私は春が@Resources注釈を認識するとは思わない:

@Resources({ 
    @Resource(name="validatorInteceptor"), 
    @Resource(name="profilingInterceptor") 
}) 
private List interceptors; 

は、あなたが知っていることはありません、とにかく試してくださいそれを与えます。

あなたの代わりにXMLの @Configurationスタイルの設定を使用することができ、より他

@Configuration 
public class MyConfig { 

    private @Resource Interceptor profilingInterceptor; 
    private @Resource Interceptor validatorInteceptor; 

    @Bean 
    public AnyAction anyAction() { 
     AnyAction anyAction = new AnyAction(); 
     anyAction.setInterceptors(Arrays.asList(
     profilingInterceptor, validatorInteceptor 
    )); 
     return anyAction; 
    } 
} 
+0

@Resourcesは、フィールドではなくタイプにのみ適用されます。 XMLでリストを表現する簡単な方法があるような場合は、アノテーションで同じことを行う方法があるはずです。これは残念です。 – Cameron

1

あなたはこのパターンを使用する場合は、[はい、春は喜んで構成されたすべてのインターセプタを注入します:

@Autowired 
public void setInterceptors(List<Interceptor> interceptors){ 
    this.interceptors = interceptors; 
} 
private List<Interceptor> interceptors; 

注ことおそらくcontext.xmlにdefault-autowire = byTypeを設定する必要があります。私はプレーンなアノテーション設定でこれに代わるものがあるかどうかわかりません。