在Spring应用程序中处理* -context.xml和applicationContext.xml文件

时间:2011-06-28 20:54:11

标签: spring spring-mvc

我使用Spring Web MVC作为hibernate与事务的前端(所有注释驱动)。我按如下方式设置web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name>wdman</display-name>

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

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

<servlet>
    <servlet-name>wdman</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>wdman</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- Disables Servlet Container welcome file handling.
     Needed for compatibility with Servlet 3.0 and Tomcat 7.0 -->
<welcome-file-list>
    <welcome-file></welcome-file>
</welcome-file-list>    

</web-app>

我不明白像<tx:annotation-driven/>这样的选项如何从根上下文(在本例中是一个定义的applicationContext.xml)继承到* -servlet.xml上下文。它似乎没有功能。我在这两个文件中都有component-scan以使应用程序正常工作。这可以吗?组件是否重复?

您能帮助或指出一些简明的文档来描述如何合并这些上下文吗?

1 个答案:

答案 0 :(得分:3)

  

我不明白像<tx:annotation-driven/>这样的选项如何从根上下文(在本例中是一个定义applicationContext.xml}到*-servlet.xml上下文继承

他们不是。这些设置是上下文的本地设置。

  

我在这两个文件中都有component-scan以使应用程序正常运行。这可以吗?组件是否重复?

如果在每个上下文中都有相同的component-scan配置,那么是的,组件将被复制。您可以指定扫描以仅实例化每个上下文所必需的组件。

但是,applicationContext.xml 中定义的bean 对于子上下文是可见的,因此您应该能够将组件扫描保留在父上下文中,并将其保留在儿童背景。根据经验,只有MVC特定的东西需要在servlet上下文中声明,而那些bean可以引用父节点中定义的bean。