Spring源码分析【1】-Tomcat的初始化
org.apache.catalina.startup.ContextConfig.configureStart()
org.apache.catalina.startup.ContextConfig.webConfig()
进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers
processServletContainerInitializers参考:Spring源码分析【1】-Tomcat和Sping的连接点
回到org.apache.catalina.startup.ContextConfig.webConfig()
加载/WEB-INF/classes下的资源
org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource
con目录下2个子目录
递归所有的目录
继续
找到第一个文件,非文件夹的
然后进入到
else if (webResource.isFile() &&
webResource.getName().endsWith(".class"))
进入processAnnotationsStream
org.apache.tomcat.util.bcel.classfile.ClassParser.ClassParser()
org.apache.tomcat.util.bcel.classfile.ClassParser.Parser()
org.apache.tomcat.util.bcel.classfile.ClassParser.readID()
java.io.DataInputStream.readInt()
org.apache.tomcat.util.bcel.classfile.ClassParser.readClassInfo
回到processAnnotationsStream
org.apache.catalina.startup.ContextConfig.checkHandlesTypes
org.apache.catalina.startup.ContextConfig.populateJavaClassCache
populateJavaClassCache(javaClass.getSuperclassName());
父类java/lang/Object.class
回到checkHandlesTypes
回到processAnnotationsStream
回到processAnnotationsWebResource
继续循环遍历其他的class文件:com\alipay\sign\Base64.class
javaClassCache增加了com.alipay.sign.Base64
如此这般
下一步开始循环自己定义的包,例如这个XXbean.class
org.apache.catalina.startup.ContextConfig.webConfig()
从以上可以看出对于类的加载是按照编译文件的约定目录去寻找的
回到org.apache.catalina.startup.ContextConfig.webConfig()
中间一些过程加载XML配置文件暂时先过,到下面这一步:
org.apache.catalina.core.StandardContext的addServletContainerInitializer方法
回到org.apache.catalina.startup.ContextConfig.lifecycleEvent()
回到org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
fireLifecycleEvent
org.apache.catalina.core.StandardContext.startInternal()
org.springframework.web.SpringServletContainerInitializer.onStartup
得到List<WebApplicationInitializer> initializers
下面是分别对SecurityWebInitializer和SpingWebInitializer
SpingWebInitializer的加载参考:Spring源码分析【3】-SpingWebInitializer的加载
Spring源码分析【1】-Tomcat的初始化相关推荐
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- tomcat源码分析_Tomcat源码分析(一)--Tomcat的初始化
Tomcat的初始化--init Bootstrap入口 //整个Tomcat的入口,在这之前会先调用静态代码块 public static void main(String args[]) {syn ...
- 【spring源码分析】IOC容器初始化(六)
前言:经过前几篇文章的讲解,我们已经得到了BeanDefinition,接下来将分析Bean的加载. 获取Bean的入口:AbstractApplicationContext#getBean 1 pu ...
- spring源码分析之spring-core总结篇
1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...
- spring源码分析第六天------spring经典面试问题
spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...
- Spring 源码分析(三) —— AOP(五)创建代理
2019独角兽企业重金招聘Python工程师标准>>> 创建代理 代理的定义其实非常简单,就是改变原来目标对象方法调用的运行轨迹.这种改变,首先会对这些方法进行拦截,从而为这些方法提 ...
- 手撸spring源码分析IOC实现原理
手撸spring源码分析IOC实现原理 文章出处:https://github.com/fuzhengwei/small-spring 根据小付哥的手撸spring核心源码一步步学习出来的结果收货总结 ...
- spring源码分析之BeanDefinition相关
目录 前言: BeanDefinition的家族系列 1.BeanDefintion的UML类图 2.BeanDefintion家族类详解 2.1.通用接口 2.2.BeanDefintion接口 2 ...
- Spring源码分析八:Mybatis ORM映射框架原理
文章目录 (一)Mybatis单独操作数据库程序 1.1.数据库表 1.2.建立PO 1.3.建立mapper接口映射 1.4.建立Mybatis配置文件 1.5.建立mapper映射文件 1.6.测 ...
最新文章
- Android PathDashPathEffect 使用详解
- [转] 中文字体网页开发指南
- CSDN博客的安全性为什么一直如此薄弱?
- 无性别服饰是趋势,但不该只停留在“中性”
- 信息系统项目管理师-信息化与信息系统考点笔记(下)
- boost 变量类型转换
- dll文件 修改特征码_Could not load dynamic library cublas64_10.dll
- c语言右上左下遍历数组,如何将一个数组的元素循环左移?
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_11-修改页面-前端-Api调用...
- A、B、C类地址及子网掩码学习笔记
- 【工具推荐】下载github部分文件
- 量化涌现:信息论方法识别多变量数据中的因果涌现
- 电脑连上了WIFI,但是却没有网(前提WIFI没有问题)
- 华为android7.0 root,华为Nova 7.0 root教程 华为Nova获取7.0系统的root权限
- 微信小程序语音识别java_微信小程序实现语音识别功能
- Docker基础、利用Docker Compose部署Vue项目
- EXCEL 快速统计一列中相同数值出现的个数
- 关于linux的音频驱动
- 【问题解决】关于 C++ 连接 Redis 集群报错 MOVED
- 华硕笔记本更换操作系统的一波三折的遭遇
热门文章
- cstring只获取到第一个数_一文讲透 Dubbo 负载均衡之最小活跃数算法
- 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值
- Linux那些事儿 之 戏说USB(28)设备的生命线(十一)
- 深度学习--TensorFlow(8)CNN卷积神经网络理论(计算机视觉)
- html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
- java保存多张图片格式_从多个URL下载多个图像文件并保存到本地计算机(使用R)...
- mysql替换开头_如何在MySQL的字符串开头搜索和替换特定字符?
- 从2D到3D的目标检测综述
- PCL点云配准(1)
- 基于C++的图像散度计算