何
に動作することは、私はArrayListの春のBean定義があるとします。ListにSpringのインスタンスを挿入するにはどうすればいいですか?
<bean id="availableLanguages" class="java.util.ArrayList">
<constructor-arg>
<bean class="java.util.Arrays" factory-method="asList">
<constructor-arg>
<list>
<value>de</value>
<value>en</value>
</list>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
今、私は、例えば、豆のすべての種類にこれを注入することができこのように:
@Controller
class Controller {
@Autowired
public Controller(ArrayList<String> availableLanguages) {
// ...
}
}
これは素晴らしいです。代わりに、次に
@Controller
class Controller {
@Autowired
public Controller(List<String> availableLanguages) {
// ...
}
}
私はタイプString
のすべてのBeanのリストを得る:それは私が私のコントローラの小さなビットを変更し、タイプList
の代わりに、このようなArrayList
を使用する場合は
を破る方法
私が定義したbeanではなく、むしろ。しかし、実際には私のリストを変更不可能なリストにまとめたいのですが、これは私の依存関係をリストにダウングレードする場合にのみ可能です。
これまで発見された回避策
次のXMLファイル:
<bean id="availableLanguages" class="java.util.Collections" factory-method="unmodifiableList">
<constructor-arg>
<bean class="java.util.Arrays" factory-method="asList">
<constructor-arg>
<list>
<value>de</value>
<value>en</value>
</list>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
は、このコントローラと一緒に動作します:
@Controller
class Controller {
@Autowired
public Controller(Object availableLanguages) {
List<String> theList = (List<String>)availableLanguages;
}
}
これは、余分な型キャストが醜いです動作しますが。
調査結果は、これまで
私はすべての問題を引き起こすように見えるspecial handling for collections in Spring 4.2.5 (the currently most recent version)があることを考え出しました。パラメータがCollection
を拡張するインタフェースである場合、特別な動作が作成されます。したがって、Object
または具体的な実装をパラメータタイプとして使用することで回避策を講じることができます。
質問
リストを直接Beanに挿入する方法はありますか?どうやって?
名前空間 'util'を使用できます。 [this](http://stackoverflow.com/questions/2416056/how-to-define-a-list-bean-in-spring)asnwerを見てください。 – josivan
@ josivan:私が見る限り、これはリストの定義方法を変えるでしょう。しかし、リストの定義は問題ではありません。それは問題を引き起こす注射ですか、私は 'util'が何をしているのか分からないのですか? – yankee
'util:list'はSpringコンテキストの通常のBeanです。普通に注入できます。アノテーションとXMLが混在しており、コンストラクタで '@修飾子 'を使用するようになっています。例えば '@Qualifier(" myList ")' – josivan