0

私が作成したBeanがいくつかあり、それらはすべてBeanのインスタンス化に同様のパターンを使用しています。最上位のオブジェクトはすべて非常に似ていますが、それらに含まれるオブジェクトは文字列コンストラクターの引数によって異なります。THIS CHANGES A各トップレベルBeanのすべては、の2つのインスタンスとの1つのインスタンスを除いて同じですTHIS CHANGES B。以下は私の豆の1つです。他は値を除いてまったく同じTHIS CHANGESです。

<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の重複の量を減らすにはどうすればよいですか?ある種のテンプレートを作成する方法を探しています。また、他のBeanへの参照があることに注意してください。

4

1 に答える 1

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>

Beanの「child1」と「child2」は、arg0、「propertyA」、「propertyB」、「propertyC」の「parent」の値を共有し、「propertyD」の独自の値を構成できます。

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

于 2012-02-16T16:41:29.980 に答える