1. 程式人生 > >Spring MVC與Web環境(一):IOC容器在Spring MVC中的啟動

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 MVCWeb環境()IOC容器Spring MVC啟動

            在原書的閱讀中我們可以看到,Spring並不是天生就能在Web容器中起作用的。我們同樣需要把我們的IoC容器手動新增到Web容器中,也就是在web.xml檔案中配置一些基礎的類比如DispatcherServlet,ContextLoaderListe

Spring MVCWeb環境(二)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中闡述的

SpringHibernate整合的相關問題和解決方案(整合方案dataSource交給Spring來管理)

整合的關鍵點:Hibernate的SessionFactory物件交給Spring去建立;Hibernate的事務交給Spring的宣告式事務管理;(Hibernate的操作是基於事務的操作);整合步驟:  配置資料來源(採用C3P0連線池)<bean id="data

SpringWeb環境整合

## 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