インターフェイスI
とそれを実装するいくつかのクラスがある場合、配列I[]
またはList<I>
Bean に注入することは可能ですか? List<Object>
を使用して実行できることがわかりましたが<list></list>
、ここでリストをパラメータ化するか、タイプの配列を取得したいと思いますI
。
リスト/配列の要素数は固定され、実行前に決定されます。
事前にフィードバックをお寄せいただきありがとうございます:-)
I Spring 3.1 では、次のように注入できます。
@Inject
List<I> list;
インターフェイスはどこにI
ありますか(ただし、具体的である必要があります)。
または、Spring Java Config( @Configuration
) を使用して名前付きリストを生成 ( ) し、または@Bean
を使用してそれらを注入することもできます。Qualifier
@Named
また、型付きの名前付きリストを次のように定義することもできます:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<util:list id="myList" value-type="java.lang.String">
<value>foo</value>
<value>bar</value>
</util:list>
コンパイル時のJAVAタイプの消去のため、これを達成することは不可能です。JAVA ジェネリックはコンパイル時にのみ使用可能であり、型の安全性を確保するために存在します。実行時には、オブジェクト (参照) のみが残ります。
型の安全性を確保するためにできる唯一のことは (ただし実行時でも)、任意の型の配列を用意し、Spring の <array></array> または <list></list> タグを使用してデータを入力することです。次に、実行時に Integer[] に文字列を入力しようとすると、例外が発生します。
ジェネリックを使用する場合は、 Set<Integer> を持つことができ、実行時に前述の型消去のために Set<String> になります。
ジェネリック型に基づいた動的な自動配線が必要な場合は、型消去のためにいいえ。タイプ(または何でも)として定義されたリストを配線したいだけの場合List<String>
、それを妨げるものは何もありません。たとえば、次のようになります。
アプリケーションのコンテキスト:
<util:list id="theList">
<value>a</value>
<value>b</value>
</util:list>
Java クラス:
@Resource(name = "theList")
List<String> theList;
ただし、これは型の安全性を提供しません。