web-dev-qa-db-ja.com

Spring Autowireリスト

リストで@Autowiredを使用することは可能ですか?

私がmimetypesを持つプロパティファイルを持っているように、私のクラスファイルには次のようなものがあります

@Autowired
private List<String> mimeTypes = new ArrayList<String>();
28
karq

Spring 4は、特定のタイプのすべてのBeanを自動的に収集し、コレクションまたは配列に挿入する機能をサポートしています。

例:

@Component
public class Car implements Vehicle {
}

@Component
public class Bus implements Vehicle {
}

@Component
public class User {
   @Autowired
   List<Vehicle> vehicles;//contains car and bus
}

参照: Spring 4 Ordering Autowired Collections

42
Tho

@Qualifier("..")はお勧めできません。代わりにautowire-by-nameを使用してください。

private @Resource(name="..") List<Strings> mimeTypes;

factorybeanを自動配線する方法 も参照してください。

33
Johan Sjöberg

Spring .xml内でJava.util.Listを作成し、@Qualifier経由でアプリケーションに挿入することもできます。 springsourceから http://static.springsource.org/spring/docs/current/reference/xsd-config.html

 <!-- creates a Java.util.List instance with the supplied values -->
 <util:list id="emails">
   <value>[email protected]</value>
   <value>[email protected]</value>
   <value>[email protected]</value>
   <value>[email protected]</value>
 </util:list>

そのため、配線は次のように変更されます。

 @Autowired
 @Qualifier("emails")
 private List<String> mimeTypes = new ArrayList<String>();

とにかく文字列のリストを注入しているので、このアプローチをお勧めします。

乾杯!

[〜#〜] edit [〜#〜]

プロパティを注入したい場合は、これをご覧ください 注釈を使用して設定されたSpring Beanにプロパティ値を注入するにはどうすればよいですか?

10
chzbrgla

最低でも修飾子が必要だと思います。そして、「new」への呼び出しは、Springを使用するという考えに反しているようです。 Springの役割は混乱しています。 「new」を呼び出すと、オブジェクトはSpringの制御下にありません。

1
duffymo

自動配線されたBeanが同じ(@Configuration)クラスで宣言されており、別のBeanを宣言する必要がある場合、次のように動作します。

@Bean
public BeanWithMimeTypes beanWithMimeTypes() {
    return new BeanWithMimeTypes(mimeTypes());
}

@Bean
public List<String> mimeTypes() {
    return Arrays.<String>asList("text/html", "application/json);
}

当然、別の構成でmimeTypes Beanをオーバーライドしても、正しく動作します。明示的な@Qualifierまたは@Resource注釈は不要です。

0
stuchl4n3k