如何在Spring中将更多hbm添加到现有的mappingResources或现有的hbm列表中

时间:2012-01-23 14:29:45

标签: spring list add extend hbm

我有一个父应用,其中包含子应用。 我的父应用程序有自己的包含的hbms列表

   <bean name="mappingResources"
      class="my.xxx.MyListFactoryBean">
        <property name="sourceList">
            <list>
                <value>aaa/bbb/aa.hbm.xml</value>
                <value>aaa/bbb/bb.hbm.xml</value>
                <value>aaa/bbb/cc.hbm.xml</value>
            </list>
      </property>
    </bean>

我的子应用程序想要将自己的相关hbms列表添加到父应用程序中。 它应该工作的方式是,如果它包含这个子应用程序,那么它也将包括新的hbms,并且子应用程序将启动包含。

要包含的新hbms可能看起来像

XX / dd.hbm.xml XX / ee.hbm.xml

我们怎么做?

1 个答案:

答案 0 :(得分:4)

您的解决方案可能是:

将'mappingResources'拆分为

<bean name="mappingResources" class="my.xxx.MyListFactoryBean">
    <property name="sourceList" ref="hbmSourceList" />
</bean>

<bean id="hbmSourceList" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <value>aaa/bbb/aa.hbm.xml</value>
            <value>aaa/bbb/bb.hbm.xml</value>
            <value>aaa/bbb/cc.hbm.xml</value>
        </list>
    </constructor-arg>
</bean>

在儿童应用程序中 引用bean“hbmSourceList”并通过“MethodInvokingFactoryBean”使用另一个列表调用“addAll”

<bean id="hbmSourceListExtender" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject"><ref bean="hbmSourceList"/></property>
    <property name="targetMethod"><value>addAll</value></property>
    <property name="arguments">
        <ref local="childAppHbmSourceList"/>
    </property>
</bean>

<bean id="childAppHbmSourceList" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <value>xx/dd.hbm.xml</value>
            <value>xx/ee.hbm.xml</value>
        </list>
    </constructor-arg>
</bean>