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里定义了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】-Tomcat和Sping的连接点相关推荐
- Spring源码分析【1】-Tomcat的初始化
org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig ...
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- spring源码分析之spring-core总结篇
1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...
- 【Spring源码分析】Bean加载流程概览
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...
- spring源码分析第六天------spring经典面试问题
spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...
- spring源码分析第五天------springAOP核心原理及源码分析
spring源码分析第五天------springAOP核心原理及源码分析 1. 面向切面编程.可以通过预 编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术 切面(A ...
- spring源码分析第四天------springmvc核心原理及源码分析
spring源码分析第四天------springmvc核心原理及源码分析 1.基础知识普及 2. SpringMVC请求流程 3.SpringMVC代码流程 4.springMVC源码分析 4.1 ...
- spring源码分析第一天------源码分析知识储备
spring源码分析第一天------源码分析知识储备 Spring源码分析怎么学? 1.环境准备: 2.思路 看:是什么? 能干啥 想:为什么? 实践:怎么做? ...
- beaninfo详解源码解析 java_【Spring源码分析】Bean加载流程概览
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...
- Spring 源码分析(三) —— AOP(五)创建代理
2019独角兽企业重金招聘Python工程师标准>>> 创建代理 代理的定义其实非常简单,就是改变原来目标对象方法调用的运行轨迹.这种改变,首先会对这些方法进行拦截,从而为这些方法提 ...
最新文章
- linux nDPI 协议检测 源码分析
- 渗透知识-CSRF攻击
- 把玩Fedora29操作系统
- 达内TTS6.0课件oop_day01
- android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)
- 第七章—JavaScript数组
- android4.2 音频模块启动分析,Android 音频模块学习小结
- 最佳牛围栏题解 二分答案
- html5音乐播放器歌词显示,(1)H5实现音乐播放器【正在播放-歌词篇】
- 磁共振线圈分类_磁共振线圈的发展历程
- 2010QQ游戏登录器(分析+感叹)
- python 微信分享链接_python如何爬取搜狗微信公众号文章永久链接的思路解析
- 笔记本如何关闭屏幕亮度自动调节(解决切换界面时屏幕忽明忽暗的问题)
- 20170605——login页面(代码知识点分析)
- 05-SparkRDD原理和编程接口
- MR案例(1)词频统计
- 公司倒闭,新的开始,是好是坏全然不知
- CodeVS 1003 电话连线
- 分享一篇父母对孩子教育方法的文章
- 失传千年AE特效真经(五)
热门文章
- 删除mysql表_Mysql 删除数据表的三种方式详解
- 快来学习Redis 分布式锁的背后原理
- PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b
- PCL两种方式的点云读写
- CV算法复现(分类算法4/6):GoogLeNet(2014年 谷歌)
- jupyter分割代码块_科研分享—Python根据关键词自动抓取Pubmed文献标题(附全部代码)文末有福利...
- activity 启动模式_腾讯大牛:你根本不懂Activity!
- PCL的PNG文件和计算点云重心
- HC-05与HC-06的AT指令的区别
- 理解OpenGL中帧缓存FrameBuffer 渲染缓存RenderingBuffer