如何避免XML Spring bean中的样板属性?

问题描述 投票:0回答:1

我的applicationContext.xml文件中有几个Bean,它们共享相似的属性(它们实现相同的接口)。

我想避免每个bean的样板属性,而是让一个bean具有可以在每个bean中引用的这些属性。

目前我所拥有的是:

<bean id="Animal"
    class="com.test.Dog">
    <constructor-arg ref="Coat"/>
    <constructor-arg value="Bark" index="1"
          type="java.lang.String"/>
    <constructor-arg value="Spot" index="2"
          type="java.lang.String"/>
</bean>


<bean id="Dog"
    class="com.test.Dog">
    <constructor-arg ref="Coat"/>
    <constructor-arg value="Bark" index="1"
          type="java.lang.String"/>
    <constructor-arg value="Spot" index="2"
          type="java.lang.String"/>
</bean>

    <bean id="Chicken"
        class="com.test.Chicken">
        <constructor-arg ref="Coat"/>
        <constructor-arg value="Cluck" index="1"
              type="java.lang.String"/>
        <constructor-arg value="Janice" index="2"
              type="java.lang.String"/>
    </bean>

    <bean id="Rhino"
        class="com.test.Rhino">
        <constructor-arg ref="Coat"/>
        <constructor-arg value="huff" index="1"
              type="java.lang.String"/>
        <constructor-arg value="Tank" index="2"
              type="java.lang.String"/>

    </bean>

    <bean id="Coat"
        class="com.test.Coat"></bean>

注意每个bean配置中的重复属性。

我想做的是这样的:

    <bean id="Animal"
        class="com.cat.test.Dog">
        <constructor-arg ref="properties"/>
    </bean>


    <bean id="Dog"
        class="com.cat.test.Dog">
        <constructor-arg ref="properties"/>
    </bean>

    <bean id="Chicken"
        class="com.cat.test.Chicken">
        <constructor-arg ref="properties"/>
    </bean>

    <bean id="Rhino"
        class="com.cat.test.Rhino">
        <constructor-arg ref="properties"/>
    </bean>

    <bean id="properties">
        <constructor-arg ref="Coat"/>
        <constructor-arg value="huff" index="1"
              type="java.lang.String"/>
        <constructor-arg value="Tank" index="2"
              type="java.lang.String"/>
    </bean> 

    <bean id="Coat"
        class="com.cat.test.Coat"></bean>

像这样可能吗?

spring spring-boot javabeans boilerplate
1个回答
0
投票

您可以使用bean定义inheritance

例如

inheritance
© www.soinside.com 2019 - 2024. All rights reserved.