1. 程式人生 > >Spring原始碼分析【2】-Tomcat和Sping的連線點

Spring原始碼分析【2】-Tomcat和Sping的連線點

Tomcat是怎麼呼叫上Spring的呢?需要找到這個連線點。

答案就在org.apache.catalina.startup.ContextConfigprocessServletContainerInitializers方法


new WebappServiceLoader()


回到processServletContainerInitializers


進入org.apache.catalina.startup.WebappServiceLoaderload方法

loader.getResources(configFile);

注意只有在WEB-INF/lib/spring-web-4.2.6.RELEASE.jar

裡定義了javax.servlet.ServletContainerInitializer檔案META-INF/services/javax.servlet.ServletContainerInitializer

所以就會只加載到該檔案忽視其他的jar包


containerServicesFound集合


loadServices


返回不可變的集合services


注意:這裡使用了 Collections.unmodifiableList(services);

不可變集合,顧名思義就是說集合是不可被修改的。集合的資料項是在建立的時候提供,並且在整個生命週期中都不可改變。

返回WebappServiceLoader


返回org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法


initializerClassMap.put(sci, new HashSet<Class<?>>());


HandlesTypes是Tomcat自定義的註解getAnnotation(HandlesTypes.class)


class SpringServletContainerInitializer implements ServletContainerInitializer


HandlesTypes


for (Class<?> type : types)

org.springframework.web.WebApplicationInitializer不是註解


interface WebApplicationInitializer


 typeInitializerMap.put(type, scis); org.springframework.web.WebApplicationInitializer


回到org.apache.catalina.startup.ContextConfig的webConfig()方法


讀取/WEB-INF/classes資原始檔


相關推薦

Spring原始碼分析2-TomcatSping連線

Tomcat是怎麼呼叫上Spring的呢?需要找到這個連線點。 答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法 new WebappServiceLo

Spring原始碼分析1-Tomcat的初始化

org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig.webConfig() 進入org.apache.catali

Spring原始碼分析4-Spring掃描basePackages註解

org.springframework.beans.factory.support.DefaultListableBeanFactory 重要資料結構 /** Map of bean definition objects, keyed by bean name */ p

Tomcat學習筆記2--- Tomcat安裝、環境變數配置、啟動關閉

本文主要講Tomcat的安裝和配置。 一 Tomcat安裝 1.1 下載 下載地址:http://tomcat.apache.org/ 1.2 安裝 Tomcat是不需要安裝的,解壓壓縮包即可。 在安裝的過程中需要注意的是:tomcat儘量不要存放在目錄名稱為中文的目錄中。 二 Tomcat環境變數配置 To

caffe 原始碼分析:Euclidean loss layer

以下是Euclidean loss layer的程式碼分析,轉自: https://blog.csdn.net/seashell_9/article/details/68064294 一. 前向函式 template <typename Dtype> void Euclide

caffe 原始碼分析:Layer基類

建構函式 //標頭檔案 include/caffe/layer.hpp //實現檔案 src/caffe/layer.cpp // src/caffe/layer.cu /* * 建構函式 * 子類中修改建構函式,自定義設定在SetUp()中設定

caffe 原始碼分析: Blob類

Blob類的:     //標頭檔案: include\caffe\blob.hpp //cpp檔案: src\caffe\blob.cpp //cu檔案: src/caffe/blob.cu //定義某layer的輸入blobs const ve

Spring原始碼學習SpringMVC之DispatcherServlet

目錄 一、前言 三、總結 一、前言 Web環境是Spring框架的重要應用場景,而SpringMVC又是Web開發中一個常用的框架,因此我們有必要學習一下SpringMVC的實現原理。 回到Web專案的配置檔案web.xml中,在使用SpringMV

JDK1.7原始碼分析集合HashMap的死迴圈

前言 在JDK1.7&1.8原始碼對比分析【集合】HashMap中我們遺留了一個問題:為什麼HashMap在呼叫resize() 方法時會出現死迴圈?這篇文章就通過JDK1.7的原始碼來分析並解釋這個問題。 如下,併發場景下使用HashMap造成Race Condition

imx6ul linux4.1.15 LED驅動配置及heartbeat原始碼分析

本文轉載自:https://blog.csdn.net/u010444107/article/details/78328807 1)檢視核心配置[email protected]:~/freescale/linux-imx$ cat arch/arm/configs/imx_v7_defconfi

spring原始碼分析系列 (2) spring拓展介面BeanPostProcessor

主要分析內容: 一、BeanPostProcessor簡述與demo示例 二、BeanPostProcessor原始碼分析:註冊時機和觸發點   一、BeanPostProcessor簡述與demo示例 BeanPostProcessor是spring非常重要的拓展介面,例如aop通過拓展

java8 LinkedList原始碼閱讀2- 總結

上一篇文章 java8 LinkedList原始碼閱讀已經分析了LinkedList原始碼,現對LinkedList做個小結。 LinkedList特點 雙向連結串列實現,因此沒有固定容量,不需要擴容 元素時有序的,輸出順序與輸入順序一致 允許元素為 nu

vscode原始碼分析程式的啟動邏輯

上一篇文章:https://www.cnblogs.com/liulun/ (小廣告:我做的開源免費的,個人知識管理及自媒體營銷工具“想學嗎”:https://github.com/xland/xiangxuema) 我們在package.json裡能找到他的入口檔案; "m

vscode原始碼分析程式的啟動邏輯,效能問題的追蹤

第一篇: vscode原始碼分析【一】從原始碼執行vscode 第二篇:vscode原始碼分析【二】程式的啟動邏輯,第一個視窗是如何建立的 啟動追蹤 程式碼檔案:src\main.js 如果指定了特定的啟動引數:trace vscode會在啟動之初,執行下面的程式碼: const con

vscode原始碼分析事件分發機制

第一篇: vscode原始碼分析【一】從原始碼執行vscode 第二篇:vscode原始碼分析【二】程式的啟動邏輯,第一個視窗是如何建立的 第三篇:vscode原始碼分析【三】程式的啟動邏輯,效能問題的追蹤 第四篇:vscode原始碼分析【四】程式啟動的邏輯,最初建立的服務 在上一篇中,

vscode原始碼分析主程序啟動訊息通訊服務

第一篇: vscode原始碼分析【一】從原始碼執行vscode 第二篇:vscode原始碼分析【二】程式的啟動邏輯,第一個視窗是如何建立的 第三篇:vscode原始碼分析【三】程式的啟動邏輯,效能問題的追蹤 第四篇:vscode原始碼分析【四】程式啟動的邏輯,最初建立的服務 第五篇:vsco

vscode原始碼分析載入第一個畫面

第一篇: vscode原始碼分析【一】從原始碼執行vscode 第二篇:vscode原始碼分析【二】程式的啟動邏輯,第一個視窗是如何建立的 第三篇:vscode原始碼分析【三】程式的啟動邏輯,效能問題的追蹤 第四篇:vscode原始碼分析【四】程式啟動的邏輯,最初建立的服務 第五篇:vsco

vscode原始碼分析窗口裡的主要元素

第一篇: vscode原始碼分析【一】從原始碼執行vscode 第二篇:vscode原始碼分析【二】程式的啟動邏輯,第一個視窗是如何建立的 第三篇:vscode原始碼分析【三】程式的啟動邏輯,效能問題的追蹤 第四篇:vscode原始碼分析【四】程式啟動的邏輯,最初建立的服務 第五篇:vsco

spring原始碼分析系列2:Bean與BeanDefinition關係

介面表示一種能力,實現了一個介面,即擁有一種能力。 BeanDefinition與Bean的關係, 就好比類與物件的關係. 類在spring的資料結構就是BeanDefinition.根據BeanDefinition得到的物件就是我們需要的Bean. 我認為理解Bean與BeanDefinition是理解

ysoserial分析7u21URLDNS

[TOC] # 7u21 7u21中利用了TemplatesImpl來執行命令,結合動態代理、AnnotationInvocationHandler、HashSet都成了gadget鏈。 先看一下呼叫棧,把ysoserial中的呼叫棧簡化了一下 ``` LinkedHashSet.readObject