web-dev-qa-db-fra.com

Printemps: Définir la propriété d'un haricot en lisant la propriété d'un autre haricot?

Est-il possible de définir la propriété d'un haricot en lisant la propriété d'un autre haricot? Par exemple, supposons que j'avais:

class A {
   void setList(List list);
}

class B {
   List getList();
}

J'aimerais que le printemps instantiaire à la fois des classes et appeler la méthode de layliste de la réalisation d'une méthode de getlist d'appel de B. La configuration du ressort pourrait ressembler à quelque chose comme:

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

Hélas, ce XML maquillé ne fonctionne pas.

Pourquoi ne pas simplement injecter b dans un? Parce que je ne veux pas introduire la dépendance supplémentaire. A n'est que la liste dépendante, pas sur B.

28
Landon Kuhn

Il y a quelques façons. Voici un:

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

Voir aussi le <util:property-path/> élément

18
Kevin

Si vous essayez de faire la même chose pour un constructeur, faites cela.

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

Ici "JDBC" est mentionné ci-dessous qui a la propriété "DataSource" avec getter et Setter et initié comme suit:

<bean id="jdbc" class="com.la.activator.DataSourceProvider">
    <property name="myDataSourcePool" ref="dsPoolService"/>
</bean>
2
Rupesh