Spring MVC與Web環境(一):IOC容器在Spring MVC中的啟動
在原書的閱讀中我們可以看到,Spring並不是天生就能在Web容器中起作用的。我們同樣需要把我們的IoC容器手動新增到Web容器中,也就是在web.xml檔案中配置一些基礎的類比如DispatcherServlet,ContextLoaderListener這些我們熟悉的類。當這些類的配置完成之後,啟動tomcat。就會在IoC容器中生成這些處理我們請求的bean。在DispatcherServlet類中,通常配置和訪問前端頁面的一些增強,以及資料提交時的一些準備工作。比如字符集過濾器,以及檔案上傳相關的類的配置。ContextLoaderListener則是和我們的Dao層息息相關,涉及到資料庫的連線,mybatis和spring的整合。可以說DispatcherServlet和ContextLoaderListener提供了Web容器中對Spring的入口。ServletContext為Spring的IoC容器提供了一個宿主環境,在這個宿主環境中建立起一個IoC容器的體系。這個IoC容器體系是通過ContextLoaderListener的初始化來建立的。然後,把DispatcherServlet這幾個Servlet作為Spring MVC處理Web請求的轉發器建立起來。
那麼就下來進入正題,我們來看看IoC容器在SpringMVC中的啟動
1. Web容器中的上下文(上下文是我們向Web容器提供配置資訊的檔案)
IoC容器的啟動過程建立上下文的過程,該上下文是與ServletContext相伴而生的,同時也是IoC容器在Web應用環境中的具體表現之一。我們稱由ContextLoaderListener啟動的上下文為根上下文。在這個根上下文的基礎上,還有一個與Web MVC相關的上下文用來儲存控制器(DispatcherServlet)需要的MVC物件,作為根上下文的子上下文,構成了一個層次化的上下文體系。
我們首先來看一下WebApplicationContext。這個類繼承了ApplicationContext介面,這是一個Web容器。
ServletContext getServletContext();
這裡面有一個獲取Servlet上下文環境的方法。在啟動過程中,Spring會使用一個預設的WebApplicationContext實現作為IoC容器。這個預設使用的是XmlWebApplicationContext。這個類增加了對Web環境和Xml配置定義的處理。在這個類的初始化過程中,我們的Spring應用會全部建立起來。在這個類中,我們可以看到。預設的根上下文配置檔案是
public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
這個類中同樣有loadDefinitions。就像我們在開始在初始化我們的容器的時候載入所有類的定義。這些程式碼的實現原理和IoC容器都是相同的。所以我不再敘述。
2.ContextLoader建立Web環境上下文
對於Spring承載的Web應用而言,可以指定在Web應用程式啟動時載入IoC容器(WebContextLoader)。這個功能是由諸如ContextLoaderListener這樣的類來完成的,它是在Web容器中配置的監聽器。我們可以理解為它持有了根上下文,當我們需要請求根上下文中涉及到的配置資訊,就要通過這個類來進行呼叫。
現在我們來看一下ContextLoaderListener的實現原理
首先,這個監聽器是啟動根IoC容器並把它載入到Web容器的主要功能模組,也是整個Spring Web應用載入IoC的第一個地方。
這個監聽器需要獲取一個ServletContext,也就是讀取到的上下文檔案。這個是從web.xml中獲取到的。接著這個ContextLoader會例項化WebApplicationContext
public void contextInitialized(ServletContextEvent event) {
initWebApplicationContext(event.getServletContext());
}
這個地方呼叫的是父類ContextLoader的方法。
ContextLoaderListener是一個監聽器,它對我們的ServletContext進行監聽。如果我們需要請求到WebApplicationContext的服務時,我們就需要通過ContextLoaderListener持有的WebApplicationContext來獲取到相應的服務。在伺服器啟動時,呼叫了contextInitialized(ServletContextEvent)方法。在伺服器關閉時,呼叫了contextDestroyed(ServletContextEvent)進行銷燬。
具體的初始化工作交由ContextLoader來完成,可以看到是在這個地方讀取到的根上下文來配置我們的WebApplicationContext容器。
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";
這樣我們的WebApplicationContext容器就建立起來了。這個容器交由ContextLoaderListener持有並監聽。下次將進入Spring Web MVC的重點。Spring MVC的啟動和初始化
相關推薦
Spring MVC與Web環境(一):IOC容器在Spring MVC中的啟動
在原書的閱讀中我們可以看到,Spring並不是天生就能在Web容器中起作用的。我們同樣需要把我們的IoC容器手動新增到Web容器中,也就是在web.xml檔案中配置一些基礎的類比如DispatcherServlet,ContextLoaderListe
Spring MVC與Web環境(二):Spring MVC的啟動以及初始化
ContextLoader在初始化完成以後,Web容器就開始初始化DispatcherServlet,這個初始化的啟動與在web.xml中對載入次序進行的定義有關。DipatcherServlet會建立自己的上下文來持有Spring MVC的Bean物件。這個建立物件的過程和
Spring學習5(1):IoC容器之IoC概述,JAVA反射機制,資源訪問器
spring學習5(1) 在經過了對spring框架基本開發的瞭解以及對spring boot流程的學習,《精通spring4.x…》這本書正式開始了spring的講解,我也跟隨著這本書的腳步進行學習。 IoC概述 首先需要學習的是spring的IoC技術,
讀《Spring-技術內幕》-第二章:IoC容器的實現-2
IoC容器系列的設計與實現 概要 部落格介紹了BeanFactory這個容器的基本介面,如getBean(String name),containsBean(String name)等等,但是這些介面並沒有具體的實現,因此給出了XmlBea
Spring原始碼解析--《SPRING技術內幕:深入解析Spring架構與設計原理》讀書筆記(一):IOC容器初始化過程
通過閱讀相關章節內容,Spring中IOC容器的載入中,我們需要了解下列幾個概念: Resource:是一個定位、訪問資源的抽象介面,包含了多種資源操作的基礎方法定義,如getInputStream()、exists()、isOpen()、getD
Spring學習一:IOC(控制反轉)和AOP(面向切面)的xml配置和註解方式
Spring框架的作用:為了簡化java開發 Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的
Spring與Hibernate整合的相關問題和解決方案(整合方案一:dataSource交給Spring來管理)
整合的關鍵點:Hibernate的SessionFactory物件交給Spring去建立;Hibernate的事務交給Spring的宣告式事務管理;(Hibernate的操作是基於事務的操作);整合步驟: 配置資料來源(採用C3P0連線池)<bean id="data
Spring與Web環境整合
## 1. Spring與Web環境整合 ### 1.1 ApplicationContext應用上下文獲取方式 應用上下文物件是通過new ClasspathXmlApplicationContext(spring配置檔案) 方式獲取的,但是每次從容器中獲得Bean時都要編寫new ClasspathX
require.js+backbone 使用r.js 在本地與生產環境 一鍵壓縮的實現方式
git print 時間 class 有時 腳本 項目 pts water requie.js 和backbone.js 這裏就不說了,能夠去看官方文檔,都非常具體! 可是使用require.js 默認帶的壓縮方式感覺不是非常方便,所以本文主要講 利用r.js壓縮,來實
Spring Boot (Web 篇):配置 AOP 切面
目錄 AOP 簡介 AOP相關概念 AOP相關注解 編寫AOP 在pom.xml加入相關依賴 編寫切面類 頁面訪問(專案啟動) JoinPoint詳解 關於多個切面的執行順序 總結 原始碼下載 AOP 簡介 AOP相關概念 Tar
Spring Boot (Web 篇):整合攔截器Interceptor
目錄 說在前面 在pom.xml加入相關依賴 定義攔截器 編寫攔截器 Interceptor 註冊攔截器 Interceptor 頁面訪問(專案啟動) 總結 原始碼下載 說在前面 Struts2(Interceptor篇):攔截器的實現
Spring Boot (Web 篇):支援JSP
目錄 前言 在pom.xml加入相關依賴 配置application.properties 建立JSP頁面 Controller層 JSP頁面 專案啟動 第一種方式,SpringBoot直接啟動(內建整合tomcat) 瀏覽器訪問 第二種
Spring Boot (Web 篇):整合Fastjson
目錄 說在前面 Fastjson目標 在pom.xml加入相關依賴 整合 Fastjson 配置管理類WebMvcConfigurer 程式設計式配置 實體類Customer 控制器類IndexController @ResponseBody 頁面訪問
Spring Boot (Web 篇):整合Thymeleaf模板
目錄 說在前面 Thymeleaf特點 在pom.xml加入相關依賴 配置application.properties Controller層 Thymeleaf頁面 專案啟動 第一種方式,SpringBoot直接啟動(內建整合tomcat)
Spring Boot (Web 篇):整合FreeMarker模板
目錄 前言 工作原理 在pom.xml加入相關依賴 配置application.properties Controller層 FreeMarker頁面 專案啟動 第一種方式,SpringBoot直接啟動(內建整合tomcat) 瀏覽器訪問 第二種方式,打
Spring Boot (Web 篇):整合Servlet
說在前面 Servlet簡介:https://blog.csdn.net/Soinice/article/details/82745918 當使用Spring-Boot時,嵌入式Servlet容器通過掃描註解的方式註冊Servlet、Filter和Servlet規範的所有監聽器(如Htt
Spring Boot (Web 篇):整合監聽器Listener
說在前面 Listener簡介:https://blog.csdn.net/Soinice/article/details/82787964 上一篇文章已經對定義Filter 的方法進行了說明,監聽器(Listener)的註冊方法和Filter一樣,不清楚的可以檢視下上一篇文章:http
Spring Boot (Web 篇):整合過濾器Filter
說在前面 Filter簡介:https://blog.csdn.net/Soinice/article/details/82787964 上一篇文章已經對定義Servlet 的方法進行了說明,過濾器(Filter)的註冊方法和 Servlet 一樣,不清楚的可以檢視下上一篇文章:http
Spring 概述與介紹 (一 )
目錄 1、Spring概述 2、Spring的模組介紹 Spring框架分為四大模組: 3、Eclipse安裝Spring的外掛 1、Spring概述 ①Spring是一個開源框架 ②Spring為簡化企業級開發而生,使用Sprin
網路與Web程式設計(一)
作為客戶端與 HTTP 服務互動 // Problem 你需要通過 HTTP 協議以客戶端的方式訪問多種服務。例如,下載資料或者與基 於 REST 的 API 進行互動。 // Solution: urllib.request 傳送一個簡單的 HTTP GE