spring:別のBeanのプロパティを読み取って、あるBeanのプロパティを設定しますか?

StackOverflow https://stackoverflow.com/questions/1602640

質問

別の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ではありません。

役に立ちましたか?

解決

spring 3.0を使用している場合は、@ Kevinの回答に加えて、新しいspring式言語を使用してこれを行うことができます

<bean id="a" class="A">
    <property name="list"
        value="#{b.list}"/>
</bean>

spring 3.0ドキュメント

他のヒント

いくつかの方法があります。 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>

ここ<!> quot; jdbc <!> quot;プロパティ<!> quot; dataSource <!> quotを持つ以下のとおりです。ゲッターとセッターを使用して、次のように初期化:

<bean id="jdbc" class="com.la.activator.DataSourceProvider">
    <property name="myDataSourcePool" ref="dsPoolService"/>
</bean>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top