Как вы обрабатываете свойство bean-компонента для чтения в весеннем XML-файле конфигурации? - PullRequest
7 голосов
/ 27 сентября 2008

Весной я хочу сделать что-то вроде следующего:

<beans>
    ...
    <bean id="bean1" ... />
    <bean id="bean2">
        <property name="propName" value="bean1.foo" />
...

Я думаю, что это вызовет метод getFoo () bean1 и вызовет метод setPropName () bean2, но, похоже, это не сработает.

Ответы [ 3 ]

6 голосов
/ 27 сентября 2008

Что я понял:

  1. У вас есть боб (bean1) с свойство под названием "foo"
  2. У вас есть еще один боб (bean2) с свойство с именем "propName", которое также должен иметь то же "фу", что и в bean1.

почему бы не сделать это:

<beans>
...
<bean id="foo" class="foopackage.foo"/>
<bean id="bean1" class="foopackage.bean1">
  <property name="foo" ref="foo"/>
</bean> 
<bean id="bean2" class="foopackage.bean2">
  <property name="propName" ref="foo"/>
</bean>
....
</beans>

При этом ваш bean2 не связан с bean1, как в вашем примере. Вы можете изменить bean1 и bean2, не влияя друг на друга.

Если вам ДЕЙСТВИТЕЛЬНО нужно сделать предложенную инъекцию, вы можете использовать:

<util:property-path id="propName" path="bean1.foo"/>
5 голосов
/ 27 сентября 2008

Вам необходимо использовать PropertyPathFactoryBean :

    <bean id="bean2" depends-on="bean1">
        <property name="propName">
            <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
                <property name="targetBeanName" value="bean1"/>
                <property name="propertyPath" value="foo"/>
            </bean>
        </property>
    </bean>
0 голосов
/ 27 сентября 2008

Я думаю, вам нужно ввести bean1, а затем вручную получить foo из-за проблемы с синхронизацией. Когда платформа разрешает значение целевого компонента?

Вы можете создать компонент-указатель и настроить его.

class SpringRef {
  private String targetProperty;
  private Object targetBean;

  //getters/setters

  public Object getValue() {
    //resolve the value of the targetProperty on targetBean. 
  }
}

Common-BeanUtils должно быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...