1. 程式人生 > >spring mvc中applicationContext.xml與spring-mvc.xml的關係

spring mvc中applicationContext.xml與spring-mvc.xml的關係

前言

本文參考了:

值得注意的是,【【Spring】淺談ContextLoaderListener及其上下文與DispatcherServlet的區別】中闡述了contextLoaderListener和dispatcherServlet的關係,
在這裡插入圖片描述

在這裡插入圖片描述

contextLoaderListener建立的上下文context預設配置就是applicationContext.xml,而DispatchServlet建立的context預設配置是spring-servlet.xml,而contextLoaderListener先建立上下文–這個上下文不如叫app上下文,後者DipatcherServlet將前者的上下文作為父親上下文進行繼承然後再建立自己的上下文–不如成為mvc上下文,當一個bean在mvc上下文中無法獲取就會溯源到父上下文–app上下文獲取。
因為同時有父子上下文,所以假如兩個配置中都配置了同樣的bean或者contextLoaderListener和DispatcherServlet中都使用同一個配置,那麼就會產生初始化兩次的囧況,

下面這樣才是對的:
在這裡插入圖片描述

在這裡插入圖片描述

兩者使用的配置檔案是不一樣的,不能用同一個,也不能在兩個配置檔案都註冊一個bean。

這篇文章講解了兩個配置的關係:

因為contextLoaderListener繼承自servletContextListener,
在這裡插入圖片描述

所以它合適初始化service,dao,資料庫連線池,mybatis,定時任務等等bean物件----注意這些都與request物件無關,無需呼叫web開發中的request或者response物件的。

而DispatchServlet適合初始化controller,views檢視層等物件—注意到它本身就是servlet,能夠隨意呼叫request等物件,當然,非同步action也在這裡設定

,後文再說這個非同步請求。

而文章【DispatcherServlet 和 ContextLoaderListener 的關係,到底用哪個?】出現的原因就是恐怕兩個上下文用同一個配置檔案或者兩個配置檔案有重合的地方,所以才會出現初始化兩次。