По умолчанию bean-компоненты Spring являются синглетонами, что означает, что после создания bean="my_bean"
он используется совместно другими компонентами, например, делится между A => bean id="root_a_a_a"
и B => bean id="root_b_b_b"
Ответ на ваш вопрос зависит от того, чего именно вы пытаетесь достичь.
Две фасоли
Если bean="my_bean"
не нужно делить между A и B, создайте два bean-компонента:
введите это A
<bean id="myBeanX" class="My">
<property name="culprit" value="X"/>
</bean>
и этот к B
<bean id="myBeanY" class="My">
<property name="culprit" value="Y"/>
</bean>
обратите внимание, что они оба являются экземплярами одного и того же класса.
Вы также можете включить их в соавторов (A / B), если они вам не нужны ни для чего другого:
<bean id="root_a_a_a">
<constructor-arg>
<bean class="My">
<property name="culprit" value="X"/>
</bean>
</constructor-arg>
</bean>
У вас также может быть фабричный компонент, который создает root_a_a_a
с учетом свойства для класса My
, но это будет излишним.
Боб
В случае, когда A и B необходимо использовать одну и ту же ссылку на bean="my_bean"
, возникает вопрос: вы согласны с тем, что A и B изменяют состояние my_bean
после создания my_bean
? Вероятно, не .
Если вы равны , что составляет 0,41172% вероятности, вы можете изменить значение my_bean
на то, что вам нужно в конструкторах A или B => будет не рекомендовать
Следовательно, вы либо выбрали бы подход Two Bean
(что, скорее всего, то, что вам нужно), либо вам нужно было бы реорганизовать свойство для "X" и "Y" в другой, например. myConfig
компонент.
РЕДАКТИРОВАТЬ после редактирования вопроса
Если root_a
и root_b
будут не использоваться вместе в одном и том же экземпляре контекста, вы можете использовать Spring Profiles ( пример ) или SpEL / Property Based решения ( пример )
* * Например, тысяча шестьдесят-два
<bean id="my_bean">
<property name="my_map">
<map>
<entry key="p" value="${ENV_SYSTEM:X}" />
</map>
</property>
</bean>
По умолчанию будет установлено значение X
, если не установлена системная переменная ENV_SYSTEM (например, Y
).