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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 SpringMVC父子容器詳解

SpringMVC父子容器詳解

更新時間:2022-10-08 10:08:11 來源:動力節點 瀏覽1735次

Spring&SpringMVC作為bean管理容器和默認的MVC框架,是大部分web應用都會選擇的解決方案。在它的使用上,雖然仍然存在基于xml的配置bean管理方式,但是在很多情況下都采用了強大的注解功能來替代它。在實際項目中,同時配置Spring和SpringMVC,混用xml配置bean和注解,會導致bean重復加載、多次實例化、無法自動注入、配置無效等奇怪的異?,F象。其實造成以上問題的大部分原因還是在于對Spring容器的理解和使用。

容器

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

子容器對父容器中的內容可見,不是默認規則

加載過程

網絡容器

對于一個web應用來說,需要部署在一個web容器中,這個容器為它提供了一個全局的ServletContext,作為Spring容器的宿主環境。

Spring容器

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

1.web.xml中的contextLoaderListener會在web容器啟動時監聽web容器的初始化事件,并調用其contextInitialized方法。在這個方法中,spring會初始化一個啟動上下文作為根上下文,即WebApplicationContext。WebApplicationContext 只是一個接口類,它的實際實現類是 XmlWebApplicationContext。

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

WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE

對于屬性 Key,將其存儲在 ServletContext 中以便于訪問。

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初始化后,開始初始化web.xml中配置的servlet??梢耘渲枚鄠€servlet,加載順序按照load-on-startup執行。以最常見的 DispatcherServlet 為例。servlet 實際上是一個標準的前端控制器,用于轉發、匹配和處理每個 servlet 請求。DispatcherServlet 上下文將在初始化期間建立自己的上下文以保存與 SpringMVC 相關的 bean。

2.先過后過

WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE

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

3.初始化完成后,spring使用servlet名稱相關的屬性(這里不簡單是servlet名稱Key,通過轉換代碼存活下來)作為屬性Key,同時也存放在ServletContext中以備后續使用。這樣,每個servlet都擁有自己的context,即擁有自己獨立的bean空間,并且每個servlet共享同一個root context中持有的bean。

當然,在創建根容器和創建子容器之間,還會創建監聽器、過濾器等。完整的加載順序是:

ServletContext -> 上下文參數 -> 監聽器 -> 過濾器 -> servlet

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

容器布局

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

傳統的

父容器:存放數據源、服務層、DAO層和事務的bean。

子容器:持有MVC相關控制器的bean。

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

新的

父容器:不關我的事~

子容器:管理所有 bean。

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

場景:在一個以增刪改查為主要業務的系統中,Dao層接口,Dao層實現類,Service層接口,Service層實現類,Action父類,Action。再加上很多O(vo\po\bo)和jsp頁面,在滿足分層的前提下,做一些比較小的功能會變得很多余,于是出現了“激進”的方案。接口,沒有Service層,不可能有很多O(vo\po\bo),所有的事務控制都上升到控制器層。

關于布局選擇,我引用了一個很好的總結:

大項目求穩定,小項目求速度。

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

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 性生活视频网址 | 西西大胆实体啪啪色哟哟 | 四虎网站在线观看 | 久久香蕉国产线看观看亚洲卡 | 亚洲精品久久久久中文字幕一区 | 99精品视频在线这里只有 | 日本一级黄色毛片 | 欧美 国产 日本 | 亚洲视频在线一区二区三区 | 成人国产精品一级毛片视频 | 五月花在线观看播放视频 | 97香蕉久久夜色精品国产 | 色爱区综合五月激情 | 成人毛片18岁女人毛片免费看 | 免费一级特黄欧美大片勹久久网 | 亚洲国产综合自在线另类 | 91国视频在线观看 | 久艹伊人 | 国产综合久久一区二区三区 | 国产精品亚洲欧美大片在线看 | 国产成人精品s8sp视频 | 欧美日本另类xxx乱大交 | 成人国产精品免费网站 | 日日lu | 五月天婷婷在线播放 | 最新欧美精品一区二区三区不卡 | 精品国产一区二区三区四区色 | 国产亚洲欧美日韩国产片 | 亚洲毛片免费在线观看 | 野外一级毛片 | 亚洲欧美国产精品久久久 | 午夜噜噜噜私人影院在线播放 | 天天做天天爱天天怼 | 免费看成人播放毛片 | 在线欧美69v免费观看视频 | 色婷婷精品综合久久狠狠 | 97国产在线视频 | 一级毛片私人影院老司机 | 尤物视频在线观看 | 久久九九久精品国产 | 亚洲精品中文字幕不卡在线 |