2012-02-16 53 views
0

我有一些我创建的bean,它们都使用类似的模式进行bean实例化。顶层对象都非常相似,但它们包含的对象因字符串构造函数参数而异。除了两个THIS CHANGES A实例和一个THIS CHANGES B实例外,每个顶级bean中的所有内容都是相同的。下面是我的一个豆子。除了THIS CHANGES值之外,其他值完全相同。如何在Spring应用程序上下文中减少重复

<bean id="mover1" class="CustomDataMover"> 
     <constructor-arg ref="session"/> 
     <constructor-arg> 
      <bean class="DataCache"> 
       <constructor-arg> 
        <bean class="AllValuesReader"> 
         <constructor-arg ref="databaseConnector"/> 
         <constructor-arg value="THIS CHANGES A"/> 
         <constructor-arg value="v1"/> 
         <constructor-arg value="v2"/> 
        </bean> 
       </constructor-arg> 
      </bean> 
     </constructor-arg> 
     <constructor-arg ref="customUpdate"/> 
     <constructor-arg value="THIS CHANGES B"/> 
     <constructor-arg> 
      <bean class="ValueGenerator"> 
       <constructor-arg> 
        <bean class="LatestValueRetriever"> 
         <constructor-arg ref="databaseConnector"/> 
         <constructor-arg value="v3"/> 
         <constructor-arg value="v4"/> 
         <constructor-arg value="THIS CHANGES A"/> 
        </bean> 
       </constructor-arg> 
      </bean> 
     </constructor-arg> 
</bean> 

如何减少我的豆中的重复量?我正在寻找某种方式来制作某种模板。另外,请注意我有其他豆的参考。

回答

5

您可以使用抽象bean定义作为模板来减少重复。例如:

<bean id="parent" abstract="true"> 
    <constructor-arg value="ARG0"/> 

    <property name="propertyA" value="A"/> 
    <property name="propertyB" value="B"/> 
    <property name="propertyC" ref="beanC"/> 
</bean> 

<bean id="child1" class="SomeClass" parent="parent"> 
    <property name="propertyD" value="D1"/> 
</bean> 

<bean id="child2" class="SomeOtherClass" parent="parent"> 
    <property name="propertyD" value="D2"/> 
</bean> 

豆“child1”和“的child2”将从“父”共同价值观为arg0中,“propertyA”,“propertyB”和“propertyC”,而且还能够配置自己的价值观为“propertyD”。

请注意,“父”没有类,因此无法实例化。还要注意,“child1”和“child2”可以是完全不同类的同一个抽象bean定义的子元素 - 这个层次结构与类层次结构无关。

+0

如何将这个应用到嵌套类?我可以使顶层实例抽象,然后将值传递给嵌套元素? – 2012-02-16 17:04:31

相关问题