2012-02-16 14 views
0

私が作成するいくつかのBeanは、Beanのインスタンス化に似たパターンを使用して作成しています。上のオブジェクトはすべて非常に似ていますが、それらに含まれるオブジェクトは文字列のコンストラクタ引数によって異なります。 THIS CHANGES Aの2つのインスタンスとTHIS CHANGES Bの1つのインスタンスを除いて、各トップレベル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> 

豆の重複を減らすにはどうすればよいですか?私はいくつかの種類のテンプレートを作成するためのいくつかの方法を探しています。また、他のBeanへの参照があることに注意してください。

答えて

5

抽象的なBean定義をテンプレートとして使用して、重複を減らすことができます。たとえば:arg0に用

<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のは」「親」から値を共有する、「propertyA」、「propertyB」、および「propertyC」、とはまだ独自の値を設定することができます"propertyD"の場合

「親」にはクラスがないため、インスタンス化できないことに注意してください。また、 "child1"と "child2"は完全に異なるクラスであるが、同じ抽象Bean定義の子になることができます。この階層はクラス階層とは何の関係もありません。

+0

これをネストされたクラスにどのように適用すればよいですか?トップレベルのインスタンスを抽象的なものにしてから、値をネストされた要素に渡すことができますか? –

関連する問題