У меня есть иерархия бобов:
<bean id = "a">
<property name = "config" value = "something"/>
</bean>
<bean id = "b">
<property name = "a" ref = "a"/>
</bean>
<bean id = "c">
<property name = "b" ref = "b"/>
</bean>
<bean id = "d">
<property name = "c" ref = "c"/>
</bean>
Все это работает. Однако предположим, что теперь мне нужна альтернативная иерархия, в которой я изменяю некоторые вещи в самом глубоком компоненте, в данном случае a.config. Чтобы все связать, мне теперь нужно удвоить всю иерархию, то есть:
<bean id = "a2">
<property name = "config" value = "something2"/>
</bean>
<bean id = "b2">
<property name = "a" ref = "a2"/>
</bean>
<bean id = "c2">
<property name = "b" ref = "b2"/>
</bean>
<bean id = "d2">
<property name = "c" ref = "c2"/>
</bean>
Я знаю два обходных пути:
Используйте свойства, т.е. что-то вроде этого
<bean id = "a">
<property name = "config" value = "${a.config}"/>
</bean>
Используйте глобальные бины и переопределите их, т.е.
<bean id = "a.config">
<constructor-arg value = "something"/>
</bean>
<bean id = "a">
<property name = "config" ref = "a.config"/>
</bean>
<!-- Override in another xml file -->
<bean id = "a.config">
<constructor-arg value = "something2"/>
</bean>
Недостатки:
Есть ли другой способ сделать это более управляемым, как-то передать параметры?
Логически я ищу что-то в этом роде:
<bean id = "a">
<property name = "config" ref-param = "a-config"/>
</bean>
<bean id = "b">
<property name = "a" ref = "a"/>
</bean>
<bean id = "c">
<property name = "b" ref = "b"/>
</bean>
<bean id = "d">
<property name = "c" ref = "c"/>
<param name = "a-config" value = "something"/>
</bean>
<bean id = "d2">
<property name = "c" ref = "c"/>
<param name = "a-config" value = "something2"/>
</bean>
@MaxFarsikov желаю. Устаревший код.




Почему бы не использовать конфигурацию Java? Думаю, эта проблема вообще не критична, если вы используете конфиг Java и IDE.