spring容器和springmvc容器,以及web容器的關係

原文鏈接:https://www.cnblogs.com/xiexin2015/p/9023239.html

首先 springmvc和spring它倆都是容器,容器就是管理對象的地方,例如Tomcat,就是管理servlet對象的,而springMVC容器和spring容器,就是管理bean對象的地方,再說的直白點,springmvc就是管理controller對象的容器,spring就是管理service和dao的容器,這下你明白了吧。所以我們在springmvc的配置文件裏配置的掃描路徑就是controller的路徑,而spring的配置文件裏自然配的就是service和dao的路徑;

其次, spring容器和springmvc容器的關係是父子容器的關係。spring容器是父容器,springmvc是子容器。在子容器裏可以訪問父容器裏的對象,但是在父容器裏不可以訪問子容器的對象,說的通俗點就是,在controller裏可以訪問service對象,但是在service裏不可以訪問controller對象;

所以這麼看的話,所有的bean,都是被spring或者springmvc容器管理的,他們可以直接注入。然後springMVC的攔截器也是springmvc容器管理的,所以在springmvc的攔截器裏,可以直接注入bean對象。

 

web容器是管理servlet,以及監聽器(Listener)和過濾器(Filter)的。這些都是在web容器的掌控範圍裏。但他們不在spring和springmvc的掌控範圍裏。因此,我們無法在這些類中直接使用Spring註解的方式來注入我們需要的對象,是無效的,
web容器是無法識別的。

但我們有時候又確實會有這樣的需求,比如在容器啓動的時候,做一些驗證或者初始化操作,這時可能會在監聽器裏用到bean對象;又或者需要定義一個過濾器做一些攔截操作,也可能會用到bean對象。
那麼在這些地方怎麼獲取spring的bean對象呢?下面我提供兩個方法:

 

 

注意:以上代碼有一個前提,那就是servlet容器在實例化ConfigListener並調用其方法之前,要確保spring容器已經初始化完畢!而spring容器的初始化也是由Listener(ContextLoaderListener)完成,因此只需在web.xml中先配置初始化spring容器的Listener,然後在配置自己的Listener。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章