別のBeanのプロパティを読み取ることで、あるBeanのプロパティを設定することは可能ですか?たとえば、私が持っていたとしましょう:
class A {
void setList(List list);
}
class B {
List getList();
}
Springで両方のクラスをインスタンス化し、AのsetListメソッドを呼び出して、BのgetListメソッドを呼び出した結果を渡したいと思います。 Spring構成は次のようになります。
<bean id="b" class="B"/>
<bean id"a" class="A">
<property name="list" ref="b" ref-property="list"/>
</bean>
残念ながら、この作成されたXMLは機能しません。
なぜBをAに注入しないのですか?余分な依存関係を導入したくないので。 AはBではなく依存リストのみです。
@Kevinの回答に加えて、あなたがSpring 3.0を使用している場合は、新しいSpring式言語でこれを行うことができます
<bean id="a" class="A">
<property name="list"
value="#{b.list}"/>
</bean>
いくつかの方法があります。ここに1つあります:
<bean id="b" class="B"/>
<bean id="a" class="A">
<property name="list">
<bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
<property name="targetObject" ref="b"/>
<property name="propertyPath" value="list"/>
</bean>
</property>
</bean>
<util:property-path/>
要素も参照してください
あなたがコンストラクターに対して同じことをしようとしているなら、これをしてください。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">
</constructor-arg>
</bean>
ここで「jdbc」は、以下に示すように、ゲッターとセッターを持つ「dataSource」プロパティを持ち、次のように初期化されます。
<bean id="jdbc" class="com.la.activator.DataSourceProvider">
<property name="myDataSourcePool" ref="dsPoolService"/>
</bean>