Comment pouvez-vous accéder à la propriété d'un haricot pour la lire dans un fichier de configuration print XML?
-
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.
La solution
Ce que j'ai compris:
- vous avez un haricot (haricot1) avec un propriété appelée "foo"
- 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.