4

Springでは、コンマで区切られたBean参照のリストを別のBeanにフィードすることは可能ですか。理想的には、カスタムプロパティエディターを使用しません。このリストは、私が制御できないプレースホルダーからのものです。

例(機能しません):

<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />

<bean class="customclass">
  <constructor-arg><ref bean="bean1,bean2" /></constructor-arg>
</bean>

これは次と同じです:

<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />

<bean class="customclass">
  <constructor-arg>
    <list>
      <ref bean="bean1"/>
      <ref bean="bean2"/>
    </list>
  </constructor-arg>
</bean>
4

2 に答える 2

5

このアプローチを使用して可能です:

次のようなエントリを持つプロパティファイルについて考えてみます。

test.properties

beanlist1=#{{@bean1,@bean2}}

これで、これを実行できるようになります。

<context:property-placeholder location="test.properties"/>
<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />

<bean class="customclass">
  <constructor-arg value="${beanlist}></constructor-arg>
</bean>

これはあなたが望むものにかなり近いです(わずかに異なる表現-#{{@bean1,@bean2}}の代わりにbean1,bean2)。

別の方法は次のとおりです。

<bean class="customclass">
  <constructor-arg value="#{{@bean1,@bean2}}"></constructor-arg>
</bean>

どちらもSpring-EL式を使用してリストを表します。

于 2012-09-08T19:43:06.360 に答える
0

直接ではありませんが、ファクトリBeanを作成してそれを実行するのは簡単です。カンマ区切りの文字列をプロパティとして受け取り、それを分割して、名前ごとにManagedListを含むを返す必要があります。RuntimeBeanReferenceその後、これを通常の方法で他のBeanに注入すると、必要な方法で参照が解決されます。

于 2012-09-08T15:29:58.443 に答える