リストで@Autowired
を使用することは可能ですか?
私がmimetypesを持つプロパティファイルを持っているように、私のクラスファイルには次のようなものがあります
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
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
}
@Qualifier("..")
はお勧めできません。代わりにautowire-by-nameを使用してください。
private @Resource(name="..") List<Strings> mimeTypes;
factorybeanを自動配線する方法 も参照してください。
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にプロパティ値を注入するにはどうすればよいですか?
最低でも修飾子が必要だと思います。そして、「new」への呼び出しは、Springを使用するという考えに反しているようです。 Springの役割は混乱しています。 「new」を呼び出すと、オブジェクトはSpringの制御下にありません。
自動配線された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
注釈は不要です。