根据上下文注入Springbean属性不同的值
我有一个springbean根据上下文注入Springbean属性不同的值,spring,spring-el,Spring,Spring El,我有一个springbeanmyu bean和一个属性myu map,我想用值“X”或值“Y”注入它。豆子: <bean id="my_bean"> <property name="my_map"> <map> <entry key="p" value="X" /> </map> </property> </bean> 整个深层层次结构再次从beanroot\u b引用。在这
myu bean
和一个属性myu map
,我想用值“X”或值“Y”注入它。豆子:
<bean id="my_bean">
<property name="my_map">
<map>
<entry key="p" value="X" />
</map>
</property>
</bean>
整个深层层次结构再次从beanroot\u b
引用。在这个层次结构中的我的_bean的ref中,我希望属性被注入值“Y”,但我不想重复整个层次结构两次
<bean id="root_b">
<ref bean="root_a_a"/>
</bean>
如何在SpringXML中实现这一点?你能想出一个聪明的解决办法吗?还有别的吗?我希望所有配置都在XML中完成,而不使用Java代码…默认情况下,SpringBean是单例的,这意味着一旦创建了
bean=“my\u bean”
,它就会在其他组件之间共享,例如在A=>bean id=“root\u A\u A”
和B=>bean id=“root\u B\u B”
你的问题的答案取决于你到底想实现什么
两颗豆子
如果A和B之间不需要共享bean=“my_bean”
,则创建两个bean:
把这个注射到
<bean id="myBeanX" class="My">
<property name="culprit" value="X"/>
</bean>
默认情况下,它将设置为
X
,除非设置了环境系统变量(例如设置为Y
)。可能是重要信息:在应用程序的一次执行中,我从不同时使用root\u a和root\u b。在每次执行中,我只选择并使用其中一个。也许您想尝试3.1中介绍的概要文件/环境?spring配置文件听起来正是我需要的。您有使用Spring3.0的变通方法吗?非常感谢!您详细的回答告诉我,我的问题有一个错误,因为我不能使用“两个bean”策略,因为我有一个完整的层次结构,我希望在不重复的情况下重用它。重新措辞。仍然在寻找比你建议的“单豆”解决方案更优雅的解决方案我接受这个答案,因为它很酷。然而,我使用了一个稍微不同的解决方案。我创建了两个新的XML文件:root_a.XML和root_b.XML,并将两个不同的根放在那里+每个根都有一个PropertyPlaceHolderConfigure,它my_property=X
或my_property=Y
和my_bean
中,我已经放置了value=“${my_property}”
<bean id="myBeanX" class="My">
<property name="culprit" value="X"/>
</bean>
<bean id="myBeanY" class="My">
<property name="culprit" value="Y"/>
</bean>
<bean id="root_a_a_a">
<constructor-arg>
<bean class="My">
<property name="culprit" value="X"/>
</bean>
</constructor-arg>
</bean>
<bean id="my_bean">
<property name="my_map">
<map>
<entry key="p" value="${ENV_SYSTEM:X}" />
</map>
</property>
</bean>