大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 SpringMVC父子容器詳解

SpringMVC父子容器詳解

更新時(shí)間:2022-10-08 10:08:11 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1918次

Spring&SpringMVC作為bean管理容器和默認(rèn)的MVC框架,是大部分web應(yīng)用都會(huì)選擇的解決方案。在它的使用上,雖然仍然存在基于xml的配置bean管理方式,但是在很多情況下都采用了強(qiáng)大的注解功能來(lái)替代它。在實(shí)際項(xiàng)目中,同時(shí)配置Spring和SpringMVC,混用xml配置bean和注解,會(huì)導(dǎo)致bean重復(fù)加載、多次實(shí)例化、無(wú)法自動(dòng)注入、配置無(wú)效等奇怪的異常現(xiàn)象。其實(shí)造成以上問(wèn)題的大部分原因還是在于對(duì)Spring容器的理解和使用。

容器

在 Spring 整體框架的核心理念中,容器是核心思想,但在一個(gè)項(xiàng)目中,不一定只有一個(gè)容器。Spring可以包含多個(gè)容器,容器之間有上下框架。最常見(jiàn)的使用場(chǎng)景是同時(shí)使用Spring和SpringMVC框架,Srping作為父(根)容器,SpringMVC作為子容器。正常使用時(shí),Spring 父容器對(duì) SpringMVC子容器中的 bean 是不可見(jiàn)的,而子容器對(duì)父容器的中間 bean 是可見(jiàn)的。這是這兩個(gè)容器的默認(rèn)規(guī)則。但:

子容器對(duì)父容器中的內(nèi)容可見(jiàn),不是默認(rèn)規(guī)則

加載過(guò)程

網(wǎng)絡(luò)容器

對(duì)于一個(gè)web應(yīng)用來(lái)說(shuō),需要部署在一個(gè)web容器中,這個(gè)容器為它提供了一個(gè)全局的ServletContext,作為Spring容器的宿主環(huán)境。

Spring容器

<context-param>
     <param-name>contextConfigLocation</param-name>  
   <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<聽(tīng)眾> 
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

1.web.xml中的contextLoaderListener會(huì)在web容器啟動(dòng)時(shí)監(jiān)聽(tīng)web容器的初始化事件,并調(diào)用其contextInitialized方法。在這個(gè)方法中,spring會(huì)初始化一個(gè)啟動(dòng)上下文作為根上下文,即WebApplicationContext。WebApplicationContext 只是一個(gè)接口類(lèi),它的實(shí)際實(shí)現(xiàn)類(lèi)是 XmlWebApplicationContext。

2.這個(gè)context就是Spring根容器,其對(duì)應(yīng)bean定義的配置由web.xml中context-param中的contextConfigLocation指定。根容器初始化后,Spring使用

WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE

對(duì)于屬性 Key,將其存儲(chǔ)在 ServletContext 中以便于訪問(wèn)。

SpringMVC 子容器

<servlet>
     <servlet-name>XXXX</servlet-name>  
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
   <init-param>  
       <param-name>contextConfigLocation</param- name>  
       <param-value>classpath:spring-mvc.xml</param-value>  
   </init-param>  
   <load-on-startup>1</load-on-startup> 
</servlet>

1.contextLoaderListener初始化后,開(kāi)始初始化web.xml中配置的servlet。可以配置多個(gè)servlet,加載順序按照l(shuí)oad-on-startup執(zhí)行。以最常見(jiàn)的 DispatcherServlet 為例。servlet 實(shí)際上是一個(gè)標(biāo)準(zhǔn)的前端控制器,用于轉(zhuǎn)發(fā)、匹配和處理每個(gè) servlet 請(qǐng)求。DispatcherServlet 上下文將在初始化期間建立自己的上下文以保存與 SpringMVC 相關(guān)的 bean。

2.先過(guò)后過(guò)

WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE

首先從ServletContext中獲取之前的根上下文(即WebApplicationContext)作為自己上下文的父上下文,然后建立DispatcherServlet自己的上下文。這個(gè)DispatcherServlet初始化自己的上下文的工作可以在它的initStrategies方法中看到,包括初始化處理器映射、視圖解析等。servlet本身持有的上下文的默認(rèn)實(shí)現(xiàn)類(lèi)也是WebApplicationContext。

3.初始化完成后,spring使用servlet名稱(chēng)相關(guān)的屬性(這里不簡(jiǎn)單是servlet名稱(chēng)Key,通過(guò)轉(zhuǎn)換代碼存活下來(lái))作為屬性Key,同時(shí)也存放在ServletContext中以備后續(xù)使用。這樣,每個(gè)servlet都擁有自己的context,即擁有自己獨(dú)立的bean空間,并且每個(gè)servlet共享同一個(gè)root context中持有的bean。

當(dāng)然,在創(chuàng)建根容器和創(chuàng)建子容器之間,還會(huì)創(chuàng)建監(jiān)聽(tīng)器、過(guò)濾器等。完整的加載順序是:

ServletContext -> 上下文參數(shù) -> 監(jiān)聽(tīng)器 -> 過(guò)濾器 -> servlet

通過(guò)以上流程,確定了一個(gè)bean的使用范圍(使用范圍高于bean的范圍定義的singleton、prototype、request、session、global-session五個(gè)范圍)。

容器布局

容器布局的本質(zhì)是確定bean的使用范圍。Spring和SpringMVC的布局大致可以分為兩個(gè)方向:

傳統(tǒng)的

父容器:存放數(shù)據(jù)源、服務(wù)層、DAO層和事務(wù)的bean。

子容器:持有MVC相關(guān)控制器的bean。

概述:事務(wù)控制在服務(wù)層。由于父容器無(wú)法訪問(wèn)文件容器中的內(nèi)容,事務(wù)bean在父容器中,無(wú)法訪問(wèn)子容器中的內(nèi)容,因此無(wú)法對(duì)子容器中的控制器進(jìn)行AOP(事務(wù))。

新的

父容器:不關(guān)我的事~

子容器:管理所有 bean。

概述:不使用listener加載spring配置文件,只使用DispatcherServlet加載Spring配置,不使用父容器,只使用一個(gè)DispatcherServlet,摒棄層次的概念。

場(chǎng)景:在一個(gè)以增刪改查為主要業(yè)務(wù)的系統(tǒng)中,Dao層接口,Dao層實(shí)現(xiàn)類(lèi),Service層接口,Service層實(shí)現(xiàn)類(lèi),Action父類(lèi),Action。再加上很多O(vo\po\bo)和jsp頁(yè)面,在滿足分層的前提下,做一些比較小的功能會(huì)變得很多余,于是出現(xiàn)了“激進(jìn)”的方案。接口,沒(méi)有Service層,不可能有很多O(vo\po\bo),所有的事務(wù)控制都上升到控制器層。

關(guān)于布局選擇,我引用了一個(gè)很好的總結(jié):

大項(xiàng)目求穩(wěn)定,小項(xiàng)目求速度。

以上就是關(guān)于“SpringMVC父子容器詳解”的介紹,大家如果想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下本站的SpringMVC教程,里面還有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久免费视频观看 | a毛片在线播放 | 国产成在线人视频免费视频 | 偷自拍视频区综合视频区 | 日韩欧美亚洲综合一区二区 | 好吊788gaoco| 亚洲人成一区二区不卡 | 日韩精品一区二区三区中文在线 | 妖精视频在线观看网站 | 久久久午夜影院 | 婷婷亚洲国产成人精品性色 | 老司机精品在线观看 | 无遮挡又黄又爽又色1000部 | 日韩在线手机看片免费看 | 国产激情自拍视频 | 日韩精品国产自在久久现线拍 | 欧美综合一区二区三区 | 在线播放波多野结衣 | 色综合久久久久综合体桃花网 | 99热久久这里只有精品6国产网 | 老妇毛片久久久久久久久 | 黄色一级网站 | 成人免费视频视频在线不卡 | 婷婷久久精品 | 国产精品高清在线观看地址 | 亚洲国产精品视频在线观看 | 亚洲一区在线免费 | 亚洲午夜一区二区三区 | 久久综合色之久久综合 | 欧美综合中文字幕久久 | 亚洲综色 | 国产主播在线看 | 久操福利视频 | 亚洲日韩欧美综合 | 国产精品探花一区在线观看 | 草久视频 | 不卡神马影院 | 成人毛片免费观看视频在线 | 国产区一区二 | 亚洲热热久久九九精品 | 四虎影音先锋 |