【走近Spring】Spring MVC容器啟動時——web九大元件初始化
阿新 • • 發佈:2021-12-10
為了更好的去理解Spring MVC的工作機制,這篇文章我們主要來講Spring MVC在初始化的時候(容器啟動的時候),做了哪些準備工作。
比如URL和Controller的繫結,以及URL和方法method的繫結,攔截器的初始化,檢視解析器的初始化等Spring MVC web9大元件的初始化。
父容器以及Spring MVC子容器的一個初始化的過程,主要涉及到以下方法:
- refresh()重新整理容器的詳細過程
- 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的三個層次:
- HttpServletBean直接繼承自java的HttpServlet,其作用是將Servlet中配置的引數設定到相應的Bean屬性上
- FrameworkServlet初始化了WebApplicationContext
- DispatcherServlet初始化了自身的9個元件(本文重點)
MultipartResolver