假设我有一个 Spring Java 项目,并且我正在尝试将其配置为 Web 服务器 servlet。这是 web.xml 文件的精简版:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/generalApplicationContext.xml
</param-value>
</context-param>
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/specificApplicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>my-servlet</servlet-name>
<url-pattern>/foo/*</url-pattern>
</servlet-mapping>
这里要注意的关键是我已经指定了两个要加载的 XML 文件。一个对我的整个应用程序是通用的,而另一个特定于“my-servlet”servlet。对于只有一个 servlet 映射的设置,这是没有意义的。但是,我的项目有多个 servlet 映射,每个映射都有特定的 Spring 设置。
我的问题: Spring 将首先加载哪个 contextConfigLocation?它是generalApplicationContext.xml 还是specificApplicationContext.xml?更重要的是,加载顺序是否重要?从我的调试工作来看,它似乎确实如此,因为当我将一些独立的 Spring 配置从一个文件移动到另一个文件时,我得到了不同的错误。
注意: 对多个 servlet 映射使用多个 spring 配置是否是一个好的做法是值得商榷的。使用 XML 配置而不是新的 Java 配置也是如此。但这不是我想在这里问的。让我们试着专注于我的主要问题。
最佳答案
generalApplicationContext.xml
是第一个加载的,因为它是与 ContextLoaderListener
ApplicationContext
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/generalApplicationContext.xml
</param-value>
</context-param>
specificApplicationContext.xml
实际上是上面加载的 generalApplicationContext.xml
的子上下文,它将是 WebApplicationContext
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/specificApplicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>my-servlet</servlet-name>
<url-pattern>/foo/*</url-pattern>
</servlet-mapping>
是的,加载顺序很重要。因为在加载父上下文时,必须满足所有必需的依赖项。
关于java - Spring Servlet 项目的 web.xml 中加载 contextConfigLocation 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539610/
相关文章:
java - 如何将 Class 值设置为 spring bean 属性?
java - 为什么不推荐使用 HibernateTemplate?
java - 如何使用 Spring 为 JUnit 测试注入(inject) ServletCon
java - 如何让 Spring 打印出哪些 Spring 配置文件处于 Activity 状态?
java - 我可以将来自 Maven 的属性(在 settings.xml 中定义的密码)注入(i
java - @Transactional(propagation=Propagation.REQU
java - Spring Security 匿名 401 而不是 403