如何从XML指定父应用程序上下文?

时间:2015-03-06 14:16:27

标签: java spring

我需要重新使用已存在的上下文作为spring中的父项。

我有2个xml文件 - bean.xml(父上下文),child-bean.xml(子上下文)

我能做到

ApplicationContext context2 = new ClassPathXmlApplicationContext(new String[] { "child-bean.xml" }, context);

但这种方法是通过代码。 有没有办法通过XML来控制它?

我尝试将其放在 child-bean.xml

<import resource="bean.xml"/>

但它不一样,因为看起来父母中的所有bean都被重新创建了。

TL; DR

我需要确保在创建子上下文时不再创建父级bean的新实例。这是否可以通过XML实现,而无需改变应用程序上下文的初始化方式?

3 个答案:

答案 0 :(得分:0)

在您的web.xml中,您可以使用以下方式加载多个应用程序上下文:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:bean1.xml,
        classpath*:bean2.xml
    </param-value>
</context-param>

答案 1 :(得分:0)

public class WebAppInitializer implements WebApplicationInitializer{

    @Override
     public void onStartup(ServletContext container) throws ServletException{
        XmlWEbApplicationContext applicationContext = 
       new   XmlWebApplicationContext();
       applicationContext.setConfigLocation("classpath:spring/*.xml");
       container.addListener(new ContextLoaderListener(applicationContext));
     }
}

答案 2 :(得分:-1)

在我的情况下,我使用ref parent

我希望我的xml配置可以帮助您

<!--parent -->
<bean id="abstractService" abstract="true"
        class="com.lizjason.spring.AbstractService">
        <property name="companyName"
            value="lizjason"/>
    </bean>

    <bean id="shippingService"
        parent="abstractService"
        class="com.lizjason.spring.ShippingService">
        <property name="shippedBy" value="lizjason"/>
    </bean>