2016-10-03 129 views
0

我正在重新配置一个webapp。我想将调度程序servlet的所有内容都移动到ContextLoaderListener中。 (这是由于安全配置的变化超出了这个问题的范围)spring mvc; contextConfigLocation加载顺序

问题1,如果我有多个应用程序上下文xml文件,它们的加载顺序是否重要?例如,包含context:component-scan的xml文件是否需要在指定DAO和服务bean的xml文件之前加载?

问题2,(或这是没有实际意义?)我怎么会指定其中* _applicationContext.xml被加载的假设A_applicationContext.xml应应C_applicationContext.xml之前加载B_applicationContext.xml之前加载顺序

我的web.xml如下:

<web-app id="WebApp_ID" version="2.4" 
 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
 

 
     <servlet> 
 
      <servlet-name>AssessmentDelivery</servlet-name> 
 
      <servlet-class> 
 
      org.springframework.web.servlet.DispatcherServlet 
 
      </servlet-class> 
 
      <load-on-startup>1</load-on-startup> 
 
     </servlet> 
 
     
 
     <servlet-mapping> 
 
     <servlet-name>AssessmentDelivery</servlet-name> 
 
     <url-pattern>/</url-pattern> 
 
    </servlet-mapping> 
 

 

 
    <context-param> 
 
     <param-name>contextConfigLocation</param-name> 
 
     <param-value>/WEB-INF/config/*_applicationContext.xml</param-value> 
 
    </context-param> 
 

 
    <!-- security filter --> 
 
    <filter> 
 
    \t \t <filter-name>springSecurityFilterChain</filter-name> 
 
    \t \t <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
 
    \t </filter> 
 

 
    \t <filter-mapping> 
 
    \t \t <filter-name>springSecurityFilterChain</filter-name> 
 
    \t \t <url-pattern>/*</url-pattern> 
 
    \t </filter-mapping> 
 

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

回答

3

几点建议:

对于这些日子来考虑通过Javaconfig进行Spring的配置。

回答问题1和2是非常重要的,你了解以下内容:

  • 当你运行应用程序春天创建一个Application Context其中存在由Spring创建并管理的所有豆。现在考虑为Application Context应该从两个“子”应用程序上下文中创建的,通常它们在文档中“提到的”如何ServletApplicationContextRootApplicationContext
    • 前者应该都扫描一下网页,如您@Controller小号和@Bean“有关的基础设施如ViewResolver等等秒。
    • 后来都应该扫描一下服务器,如@Service@Repositories@Bean的有关基础设施,如为DataSource

是非常重要的了解以下内容:

  • ServletApplicationContext - >RootApplicationContext
    • 这意味着前者可以得到访问后(大约它使用的依赖,即:一个@Controller需要@Service) 。因此它反映了Web方可以访问server方。

一旦说这下面是可能

  • RootApplicationContext - >ServletApplicationContext
    • 没有感觉,从服务器端一个Bean要访问的网络侧(不好的做法)

很久以前我不使用web.xml

  • DispatcherServlet + contextConfigLocation(通过<init-param>)表示ServletApplicationContext
  • ContextLoaderListener + contextConfigLocation(通过<context-param>)表示RootApplicationContext

它如果豆类是通过以下方式宣布的:

  • XML
  • JavaConfig
  • 注释@Controller

春季管理着约在什么样的顺序创建豆类周期。所以不要紧记.xml文件(在你的情况下)(关于顺序)。