我有一个层次的bean:
<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>
一切正常。但是,假设我现在需要一个替代层次结构,其中需要更改最深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并覆盖它们,即
<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>