Pouvons-nous avoir des noms en double pour le même identificateur de haricot qui est mentionné dans le XML ? Si ce n'est pas le cas, comment pouvons-nous remplacer le haricot au printemps ?
Réponses
Trop de publicités?J'ajouterai que si votre besoin est juste de remplacer une propriété utilisée par votre haricot, l'approche id fonctionne trop comme skaffman l'a expliqué :
Dans votre premier fichier de configuration XML :
<bean id="myBeanId" class="com.blabla">
<property name="myList" ref="myList"/>
</bean>
<util:list id="myList">
<value>3</value>
<value>4</value>
</util:list>
Dans votre deuxième fichier de configuration XML :
<util:list id="myList">
<value>6</value>
</util:list>
Ensuite, votre haricot "myBeanId" sera instancié avec une propriété "myList" d'un élément qui est 6.
Exemple tiré du manuel officiel du printemps :
<bean id="inheritedTestBean" abstract="true"
class="org.springframework.beans.TestBean">
<property name="name" value="parent"/>
<property name="age" value="1"/>
</bean>
<bean id="inheritsWithDifferentClass"
class="org.springframework.beans.DerivedTestBean"
parent="inheritedTestBean" init-method="initialize">
<property name="name" value="override"/>
<!-- the age property value of 1 will be inherited from parent -->
</bean>
C'est ce que vous cherchiez ? Lien mis à jour
Je ne sais pas si c'est exactement ce dont vous avez besoin, mais nous utilisons des profils pour définir l'environnement dans lequel nous nous exécutons et un bean spécifique pour chaque environnement, donc c'est quelque chose comme ça :
<bean name="myBean" class="myClass">
<constructor-arg name="name" value="originalValue" />
</bean>
<beans profile="DEV, default">
<!-- Specific DEV configurations, also default if no profile defined -->
<bean name="myBean" class="myClass">
<constructor-arg name="name" value="overrideValue" />
</bean>
</beans>
<beans profile="CI, UAT">
<!-- Specific CI / UAT configurations -->
</beans>
<beans profile="PROD">
<!-- Specific PROD configurations -->
</beans>
Donc, dans ce cas, si je ne définis pas de profil ou si je le définis comme "DEV", myBean obtiendra "overrideValue" pour son argument name. Mais si je mets le profil à "CI", "UAT" ou "PROD", il obtiendra "originalValue" comme valeur.