1. 程式人生 > 其它 >【走近Spring】Spring MVC容器啟動時——web九大元件初始化

【走近Spring】Spring MVC容器啟動時——web九大元件初始化

為了更好的去理解Spring MVC的工作機制,這篇文章我們主要來講Spring MVC在初始化的時候(容器啟動的時候),做了哪些準備工作。

比如URL和Controller的繫結,以及URL和方法method的繫結,攔截器的初始化,檢視解析器的初始化等Spring MVC web9大元件的初始化。

父容器以及Spring MVC子容器的一個初始化的過程,主要涉及到以下方法:

  1. refresh()重新整理容器的詳細過程
  2. web子容器中,初始化web9大元件的onRefresh()方法

本文因為主講web環境,因此主要剖析onRefresh()這個方法所做的事。(其實是DispatcherServlet裡的initStrategies()這個方法)。

/**
 * Initialize the strategy objects that this servlet uses.
 * <p>May be overridden in subclasses in order to initialize further strategy objects.
 * 子類若有需要,還可以複寫此方法,去初始化自己的其餘元件(比如要和它整合等等)
 */
protected void initStrategies(ApplicationContext context) {
	initMultipartResolver(context);
	initLocaleResolver(context);
	initThemeResolver(context);
	
	// 注意,下面是複數,有s。注意區別哦~
	initHandlerMappings(context);
	initHandlerAdapters(context);
	initHandlerExceptionResolvers(context);
	initRequestToViewNameTranslator(context);
	initViewResolvers(context);
	initFlashMapManager(context);
}

Spring MVC九大元件(按照原始碼順序解釋)

DispatcherServlet的預設配置檔案DispatcherServlet.properties裡都有定義這九大元件的預設值

從上面原始碼中,可能很清楚的看到9大元件的名稱,那麼我們先來介紹它們各有什麼作用:

這裡順便解釋一下SpringMVC中的Servlet的三個層次:

  1. HttpServletBean直接繼承自java的HttpServlet,其作用是將Servlet中配置的引數設定到相應的Bean屬性上
  2. FrameworkServlet初始化了WebApplicationContext
  3. DispatcherServlet初始化了自身的9個元件(本文重點)

MultipartResolver