Spring原始碼分析【2】-Tomcat和Sping的連線點
Tomcat是怎麼呼叫上Spring的呢?需要找到這個連線點。
答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法
new WebappServiceLoader()
回到processServletContainerInitializers
進入org.apache.catalina.startup.WebappServiceLoader的load方法
loader.getResources(configFile);
注意只有在WEB-INF/lib/spring-web-4.2.6.RELEASE.jar
所以就會只加載到該檔案忽視其他的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】-Tomcat和Sping的連線點
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分析【二】7u21和URLDNS
[TOC] # 7u21 7u21中利用了TemplatesImpl來執行命令,結合動態代理、AnnotationInvocationHandler、HashSet都成了gadget鏈。 先看一下呼叫棧,把ysoserial中的呼叫棧簡化了一下 ``` LinkedHashSet.readObject