3

インターフェイスIとそれを実装するいくつかのクラスがある場合、配列I[]またはList<I>Bean に注入することは可能ですか? List<Object>を使用して実行できることがわかりましたが<list></list>、ここでリストをパラメータ化するか、タイプの配列を取得したいと思いますI

リスト/配列の要素数は固定され、実行前に決定されます。

事前にフィードバックをお寄せいただきありがとうございます:-)

4

3 に答える 3

2

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>
于 2013-03-19T20:13:44.770 に答える
0

コンパイル時のJAVAタイプの消去のため、これを達成することは不可能です。JAVA ジェネリックはコンパイル時にのみ使用可能であり、型の安全性を確保するために存在します。実行時には、オブジェクト (参照) のみが残ります。

型の安全性を確保するためにできる唯一のことは (ただし実行時でも)、任意の型の配列を用意し、Spring の <array></array> または <list></list> タグを使用してデータを入力することです。次に、実行時に Integer[] に文字列を入力しようとすると、例外が発生します。

ジェネリックを使用する場合は、 Set<Integer> を持つことができ、実行時に前述の型消去のために Set<String> になります。

于 2013-03-19T19:46:22.877 に答える
0

ジェネリック型に基づいた動的な自動配線が必要な場合は、型消去のためにいいえ。タイプ(または何でも)として定義されたリストを配線したいだけの場合List<String>、それを妨げるものは何もありません。たとえば、次のようになります。

アプリケーションのコンテキスト:

<util:list id="theList">
    <value>a</value>
    <value>b</value>
</util:list>

Java クラス:

@Resource(name = "theList")
List<String> theList;  

ただし、これは型の安全性を提供しません。

于 2013-03-19T20:06:01.593 に答える