Comment pouvez-vous accéder à la propriété d'un haricot pour la lire dans un fichier de configuration print XML?

StackOverflow https://stackoverflow.com/questions/142740

  •  02-07-2019
  •  | 
  •  

Question

Je veux faire quelque chose comme ce qui suit au printemps:

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

Je pense que cela accéderait à la méthode getFoo () de bean1 et appellerait la méthode setPropName () de bean2, mais cela ne semble pas fonctionner.

Était-ce utile?

La solution

Ce que j'ai compris:

  1. vous avez un haricot (haricot1) avec un propriété appelée "foo"
  2. Vous avez un autre haricot (haricot2) avec un propriété nommée " propName " ;, qui doit avoir le même " foo " que dans bean1.

pourquoi ne pas faire ceci:

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

Ce faisant, votre bean2 n'est pas couplé à bean1 comme dans votre exemple. Vous pouvez changer bean1 et bean2 sans vous affecter.

Si vous VRAIMENT devez faire l'injection que vous avez proposée, vous pouvez utiliser:

<util:property-path id="propName" path="bean1.foo"/>

Autres conseils

Vous devez utiliser 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>

Je pense que vous devez injecter bean1, puis obtenir manuellement toto en raison d'un problème de synchronisation. Quand le framework résoud-il la valeur du bean cible?

Vous pouvez créer un bean de pointeur et le configurer.

class SpringRef {
  private String targetProperty;
  private Object targetBean;

  //getters/setters

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

Common-BeanUtils devrait être utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top