2014-12-23 34 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實際上被注入了什麼。 –