Как установить свойство bean-компонента в свойство другого bean-компонента

Это мой файл конфигурации spring:

   <bean id="controller" class="com.sample.controller.Controller">
       <property name="message" value="Controller1"/>
   </bean>
   <bean id="controller2" class="com.sample.controller.Controller2">
       <property name="message" value="#{controller.message}"/>
   </bean>

И код:

 ApplicationContext context = 
         new ClassPathXmlApplicationContext("beans.xml");

  Controller obj = (Controller) context.getBean("controller");

  System.out.println(obj.getMessage());
  obj.message = "Controller1 changed!";

  Controller2 obj2 = (Controller2) context.getBean("controller2");
  System.out.println(obj2.getMessage());

Я хотел, чтобы вывод был:

Controller1
Controller1 changed!

но это

Controller1
Controller1

Есть ли более простой способ получить обновленное значение, кроме внедрения Controller в Controller1?

Спасибо.


person sharma sharma    schedule 01.08.2013    source источник


Ответы (1)


определить свойство message как сам компонент

<bean id="message" class="java.lang.String">
    <constructor-arg value="Controller1"/>
</bean>

и измените исходную конфигурацию bean-компонента

   <bean id="controller" class="com.sample.controller.Controller">
       <property name="message" ref="message"/>
   </bean>
   <bean id="controller2" class="com.sample.controller.Controller2">
       <property name="message" ref="message"/>
   </bean>

Теперь измените сообщение в коде Java на

  String obj = (String) context.getBean("message");

и добавьте его обратно в контекст

person jmj    schedule 01.08.2013
comment
Можете ли вы уточнить? Вы имели в виду другой компонент (также определенный в конфигурации), который просто имеет «сообщение» в качестве переменной-члена? - person sharma sharma; 02.08.2013
comment
Это должно сработать. Спасибо за решение! Нет ли другого пути для этого? Таким образом, я должен перечислить все переменные-члены, которые я хочу передать из одного класса в другой (например, списки, карты). - person sharma sharma; 02.08.2013
comment
да, у вас также может быть карта как боб - person jmj; 02.08.2013
comment
Как указать тип списка? Как список строк или список Foo? Изначально у меня нет никаких элементов для добавления в 'ref', поэтому должен быть какой-то способ сообщить Spring, какие объекты я буду добавлять в список. Спасибо! - person sharma sharma; 02.08.2013
comment
Я попробовал это и оказалось, что мне не нужно указывать тип класса. - person sharma sharma; 02.08.2013
comment
не могли бы вы уточнить - person jmj; 02.08.2013
comment
Я добавил эту строку, и мне не нужно было указывать, какой тип списка я использую в классе. Это работает для List‹String› или List‹Foo› <bean id="someList" class="java.util.ArrayList"></bean> - person sharma sharma; 02.08.2013