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

Това е моят пролетен конфигурационен файл:

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

<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
Може ли по-подробно? Имахте предвид друг bean (дефиниран също в config), който просто има „message“ като членска променлива? - person sharma sharma; 02.08.2013
comment
Това трябва да работи. Благодаря за решението! Няма ли друг начин за това? По този начин трябва да изброя всички членски променливи, които искам да предам от един клас в друг (като списъци, карти). - person sharma sharma; 02.08.2013
comment
да, може да имате и Map като bean - 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