spring配置文件关系?

时间:2013-10-23 13:30:46

标签: java spring java-ee-6 spring-ioc

我使用的是spring3.x.我的应用程序中有以下配置文件。

applicationContext.xml
spring-ws-servlet.xml

的web.xml

   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/applicationContext.xml</param-value>
    </context-param>


<servlet>
        <servlet-name>spring-ws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
            <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config/spring-ws-servlet.xml</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
        <servlet-name>spring-ws</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

我的问题是我们需要在applicationContext.xml中保留哪种bean以及我们需要在spring-ws-servlet.xml中保留哪种bean?为什么我们需要两者?我应该将所有内容保留在applicationContext.xml并删除spring-ws-servlet.xml吗?

如果我有两个,那么我应该互相导入吗?请帮帮我。

谢谢!

2 个答案:

答案 0 :(得分:1)

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/applicationContext.xml</param-value>
</context-param>

您必须将侦听器定义为:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener侦听器负责启动和停止Spring root ApplicationContext接口,该接口加载applicationContext.xml中定义的bean。它通过查看<context-param>的{​​{1}}标记找到要使用的配置。

contextConfigLocation

<servlet> <servlet-name>spring-ws</servlet-name> <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-ws-servlet.xml</param-value> </init-param> </servlet> 创建的ApplicationContextDispatcherServlet界面的子级。 通常,Spring MVC特定的组件 在DispatcherServlet的ApplicationContext接口中初始化,同时 其余的由root ApplicationContext 加载。

ContextLoaderListener中的bean(例如DispatcherServlet创建的bean)可以引用其父ApplicationContext的bean(例如ContextLoaderListener创建的bean)。但是,child ApplicationContext无法引用parent ApplicationContext的bean。

答案 1 :(得分:1)

我们正在处理两种类型的上下文:

1:根上下文(父上下文。通常包括所有jdbc(ORM,Hibernate)初始化和其他Spring安全相关​​配置)

2:单个servlet上下文(子上下文。典型Dispatcher Servlet上下文并初始化与spring-mvc相关的所有bean(控制器,URL映射等))。

以下是web.xml的示例,其中包含多个应用程序上下文文件

  

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<display-name>Spring Web Application example</display-name>

<!-- Configurations for the root application context (parent context) -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/jdbc/spring-jdbc.xml <!-- JDBC related context -->
        /WEB-INF/spring/security/spring-security-context.xml <!-- Spring Security related context -->
    </param-value>
</context-param>

<!-- Configurations for the DispatcherServlet application context (child context) -->
<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/mvc/spring-mvc-servlet.xml
        </param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/admin/*</url-pattern>
</servlet-mapping>