是否可以通过读取另一个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。
答案 0 :(得分:49)
除了@ Kevin的答案,如果您使用的是Spring 3.0,可以使用新的spring表达式语言
<bean id="a" class="A">
<property name="list"
value="#{b.list}"/>
</bean>
答案 1 :(得分:18)
有两种方法。这是一个:
<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/>
元素
答案 2 :(得分:2)
如果您尝试对构造函数执行相同操作,请执行此操作。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">
</constructor-arg>
</bean>
这里的“jdbc”如下所述,它具有带有getter和setter的属性“dataSource”,并被初始化为:
<bean id="jdbc" class="com.la.activator.DataSourceProvider">
<property name="myDataSourcePool" ref="dsPoolService"/>
</bean>