Ответ 1
в дополнение к ответу @Kevin, если вы используете spring 3.0, это можно сделать с помощью нового языка выражения spring
<bean id="a" class="A">
<property name="list"
value="#{b.list}"/>
</bean>
Можно ли установить свойство одного bean, прочитав свойство другого bean? Например, предположим, что у меня было:
class A {
void setList(List list);
}
class B {
List getList();
}
Я хотел бы, чтобы Spring создавал экземпляры обоих классов и вызывал метод 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.
в дополнение к ответу @Kevin, если вы используете spring 3.0, это можно сделать с помощью нового языка выражения spring
<bean id="a" class="A">
<property name="list"
value="#{b.list}"/>
</bean>
Есть несколько способов. Вот один из них:
<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>
Здесь "jdbc", как упоминалось ниже, имеет свойство "dataSource" с геттером и установщиком и инициализируется как:
<bean id="jdbc" class="com.la.activator.DataSourceProvider">
<property name="myDataSourcePool" ref="dsPoolService"/>
</bean>