javascript
SpringMVC容器和Spring容器
Tomcat&Jetty在啟動(dòng)時(shí)給每個(gè)Web應(yīng)用創(chuàng)建一個(gè)全局的上下文環(huán)境,這個(gè)上下文就是ServletContext,其為后面的Spring容器提供宿主環(huán)境。
Tomcat&Jetty在啟動(dòng)過程中觸發(fā)容器初始化事件,Spring的ContextLoaderListener會(huì)監(jiān)聽到這個(gè)事件,它的contextInitialized方法會(huì)被調(diào)用,在這個(gè)方法中,Spring會(huì)初始化全局的Spring根容器,這個(gè)就是Spring的IoC容器,IoC容器初始化完畢后,Spring將其存儲(chǔ)到ServletContext中,便于以后來獲取。
Tomcat&Jetty在啟動(dòng)過程中還會(huì)掃描Servlet,一個(gè)Web應(yīng)用中的Servlet可以有多個(gè),以SpringMVC中的DispatcherServlet為例,這個(gè)Servlet實(shí)際上是一個(gè)標(biāo)準(zhǔn)的前端控制器,用以轉(zhuǎn)發(fā)、匹配、處理每個(gè)Servlet請(qǐng)求。
Servlet一般會(huì)延遲加載,當(dāng)?shù)谝粋€(gè)請(qǐng)求達(dá)到時(shí),Tomcat&Jetty發(fā)現(xiàn)DispatcherServlet還沒有被實(shí)例化,就調(diào)用DispatcherServlet的init方法,DispatcherServlet在初始化的時(shí)候會(huì)建立自己的容器,叫做SpringMVC 容器,用來持有Spring MVC相關(guān)的Bean。同時(shí),Spring MVC還會(huì)通過ServletContext拿到Spring根容器,并將Spring根容器設(shè)為SpringMVC容器的父容器,請(qǐng)注意,Spring MVC容器可以訪問父容器中的Bean,但是父容器不能訪問子容器的Bean, 也就是說Spring根容器不能訪問SpringMVC容器里的Bean。說的通俗點(diǎn)就是,在Controller里可以訪問Service對(duì)象,但是在Service里不可以訪問Controller對(duì)象。
總結(jié)
以上是生活随笔為你收集整理的SpringMVC容器和Spring容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP协议长短连接以及无状态
- 下一篇: 谈谈你的GC调优思路?