spring: set property of one bean by reading the property of another bean?

孤者浪人 提交于 2019-12-17 15:53:45

问题


Is it possible to set the property of one bean by reading the property of another bean? For instance, suppose I had:

class A {
   void setList(List list);
}

class B {
   List getList();
}

I would like Spring to instantiate both classes, and call A's setList method, passing in the result of calling B's getList method. The Spring configuration might look something like:

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

Alas, this made-up XML does not work.

Why not just inject B into A? Because I do not want to introduce the extra dependency. A is only dependent List, not on B.


回答1:


in addition to @Kevin's answer if you are using spring 3.0 it is possible to do this with the new spring expression language

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

spring 3.0 documentation




回答2:


There are a couple of ways. Here is one:

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

Also see the <util:property-path/> element




回答3:


If you are trying to do the same for a constructor then do this.

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

Here "jdbc" is as mentioned below that has property "dataSource" with getter and setter and initilized as:

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


来源:https://stackoverflow.com/questions/1602640/spring-set-property-of-one-bean-by-reading-the-property-of-another-bean

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!