2014-12-23 37 views
3

这里是春天文档如何recomends初始化的DispatcherServlet:了解春季分发程序Servlet初始化

<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/root-context.xml</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

我的问题是关于init-param标签中提供了一个空PARAM值。尽管将该参数定义为context-param,但我们仍然提供空值。因此当传递给servlet的init()方法时,contextConfigLocation应该是null。怎么了,请纠正我。

+0

你可能想看看[源代码](http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-webmvc/4.1.1.RELEASE/org/springframework /web/servlet/DispatcherServlet.java#DispatcherServlet) – TheLostMind

回答

8

在Spring Web应用程序中,有两种类型的容器,每种容器都被配置和初始化的方式不同。

  • 应用上下文
  • Web应用程序上下文

应用程序上下文由配置文件inialised是您在指定为上下文PARAMS和ContextLoaderListener的回升。这纯粹是我会考虑作为业务逻辑相关的豆。

Web应用程序上下文是可能存在也可能不存在的应用程序上下文的子代。每个DispatcherServlet都会有关联的WebApplicationContext,并从init-params中获取spring bean来创建上下文。

无论ApplicationContext中的哪些bean可用,都可以从每个WebApplicationContext引用。

我们有两种不同的bean配置的原因是保持业务逻辑组件和数据访问类(通常在ApplicationContext中定义)之类的中间层服务和Web相关组件(如控制器和视图解析器(在每个Dispatcher Servlet的WebApplicationContext中定义)。

+0

因此,实际上我们在定义中提供了两个不同的上下文,第一个与Spring应用程序有关,第二个与Spring Web Application有关。但是当我们用'@ Autowired'注入一个bean时,如果它在'web-context'和'non-web-context'中被定义,那么这个bean实际上被注入了什么。 –