Frage

Ist es möglich, die Eigenschaft, eine Bohne zu setzen, indem die Eigenschaft eines anderen Bean zu lesen? Zum Beispiel: Angenommen ich hatte:

class A {
   void setList(List list);
}

class B {
   List getList();
}

Ich möchte Frühling beide Klassen instanziiert und nennen A die Setlist-Methode in dem Ergebnis vorbei B getList Methode aufzurufen. Die Spring-Konfiguration etwas aussehen könnte:

<bean id="b" class="B"/>
<bean id"a" class="A">
    <property name="list" ref="b" ref-property="list"/>
</bean>

Ach, diese konfektionierten XML funktioniert nicht.

Warum nicht einfach B in A injiziert? Denn ich will nicht die zusätzliche Abhängigkeit einzuführen. A ist nur abhängig List, nicht auf B.

War es hilfreich?

Lösung

neben @ Kevins Antwort, wenn Sie Feder verwenden 3.0 ist es möglich, dies mit der neuen Federausdruckssprache zu tun

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

Feder 3.0 Dokumentation

Andere Tipps

Es gibt ein paar Möglichkeiten. Hier ist eine:

<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>

Siehe auch die <util:property-path/> Element

Wenn Sie versuchen, das gleiche für einen Konstruktor zu tun, dann tun.

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">            
            </constructor-arg>
</bean>

Hier „jdbc“ ist, wie unten erwähnt, dass hat die Eigenschaft „Datasource“ mit Getter und Setter und initilized wie:

<bean id="jdbc" class="com.la.activator.DataSourceProvider">
    <property name="myDataSourcePool" ref="dsPoolService"/>
</bean>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top