Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据上下文注入Springbean属性不同的值_Spring_Spring El - Fatal编程技术网

根据上下文注入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引用。在这

我有一个springbean
myu bean
和一个属性
myu map
,我想用值“X”或值“Y”注入它。豆子:

<bean id="my_bean">
  <property name="my_map">
    <map>
      <entry key="p" value="X" />
    </map>
  </property>
</bean>
整个深层层次结构再次从bean
root\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>