Spring源码分析【1】-Tomcat的初始化


org.apache.catalina.startup.ContextConfig.configureStart()

Spring源码分析【1】-Tomcat的初始化_第1张图片


org.apache.catalina.startup.ContextConfig.webConfig()

Spring源码分析【1】-Tomcat的初始化_第2张图片


进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers

Spring源码分析【1】-Tomcat的初始化_第3张图片

processServletContainerInitializers参考:Spring源码分析【1】-Tomcat和Sping的连接点


回到org.apache.catalina.startup.ContextConfig.webConfig()

加载/WEB-INF/classes下的资源

Spring源码分析【1】-Tomcat的初始化_第4张图片Spring源码分析【1】-Tomcat的初始化_第5张图片

org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource

Spring源码分析【1】-Tomcat的初始化_第6张图片


con目录下2个子目录

Spring源码分析【1】-Tomcat的初始化_第7张图片


Spring源码分析【1】-Tomcat的初始化_第8张图片

递归所有的目录

Spring源码分析【1】-Tomcat的初始化_第9张图片

继续

Spring源码分析【1】-Tomcat的初始化_第10张图片

找到第一个文件,非文件夹的

Spring源码分析【1】-Tomcat的初始化_第11张图片


然后进入到

else if (webResource.isFile() &&
                webResource.getName().endsWith(".class"))

Spring源码分析【1】-Tomcat的初始化_第12张图片


进入processAnnotationsStream

Spring源码分析【1】-Tomcat的初始化_第13张图片

org.apache.tomcat.util.bcel.classfile.ClassParser.ClassParser()

Spring源码分析【1】-Tomcat的初始化_第14张图片

org.apache.tomcat.util.bcel.classfile.ClassParser.Parser()

Spring源码分析【1】-Tomcat的初始化_第15张图片


org.apache.tomcat.util.bcel.classfile.ClassParser.readID()

Spring源码分析【1】-Tomcat的初始化_第16张图片


java.io.DataInputStream.readInt()

Spring源码分析【1】-Tomcat的初始化_第17张图片


org.apache.tomcat.util.bcel.classfile.ClassParser.readClassInfo

Spring源码分析【1】-Tomcat的初始化_第18张图片


回到processAnnotationsStream

Spring源码分析【1】-Tomcat的初始化_第19张图片


org.apache.catalina.startup.ContextConfig.checkHandlesTypes

Spring源码分析【1】-Tomcat的初始化_第20张图片


org.apache.catalina.startup.ContextConfig.populateJavaClassCache

Spring源码分析【1】-Tomcat的初始化_第21张图片


populateJavaClassCache(javaClass.getSuperclassName());

Spring源码分析【1】-Tomcat的初始化_第22张图片


父类java/lang/Object.class

Spring源码分析【1】-Tomcat的初始化_第23张图片


回到checkHandlesTypes

Spring源码分析【1】-Tomcat的初始化_第24张图片


回到processAnnotationsStream

Spring源码分析【1】-Tomcat的初始化_第25张图片


回到processAnnotationsWebResource

Spring源码分析【1】-Tomcat的初始化_第26张图片


继续循环遍历其他的class文件:com\alipay\sign\Base64.class

Spring源码分析【1】-Tomcat的初始化_第27张图片

javaClassCache增加了com.alipay.sign.Base64

Spring源码分析【1】-Tomcat的初始化_第28张图片


如此这般

Spring源码分析【1】-Tomcat的初始化_第29张图片


下一步开始循环自己定义的包,例如这个XXbean.class

Spring源码分析【1】-Tomcat的初始化_第30张图片

org.apache.catalina.startup.ContextConfig.webConfig()Spring源码分析【1】-Tomcat的初始化_第31张图片

Spring源码分析【1】-Tomcat的初始化_第32张图片

从以上可以看出对于类的加载是按照编译文件的约定目录去寻找的


回到org.apache.catalina.startup.ContextConfig.webConfig()

Spring源码分析【1】-Tomcat的初始化_第33张图片


中间一些过程加载XML配置文件暂时先过,到下面这一步:

Spring源码分析【1】-Tomcat的初始化_第34张图片


org.apache.catalina.core.StandardContextaddServletContainerInitializer方法

Spring源码分析【1】-Tomcat的初始化_第35张图片


回到org.apache.catalina.startup.ContextConfig.lifecycleEvent()

Spring源码分析【1】-Tomcat的初始化_第36张图片


回到org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent

Spring源码分析【1】-Tomcat的初始化_第37张图片


fireLifecycleEvent

Spring源码分析【1】-Tomcat的初始化_第38张图片


org.apache.catalina.core.StandardContext.startInternal()

Spring源码分析【1】-Tomcat的初始化_第39张图片


org.springframework.web.SpringServletContainerInitializer.onStartup

Spring源码分析【1】-Tomcat的初始化_第40张图片


得到List initializers

Spring源码分析【1】-Tomcat的初始化_第41张图片

下面是分别对SecurityWebInitializerSpingWebInitializer

SpingWebInitializer的加载参考:Spring源码分析【3】-SpingWebInitializer的加载


你可能感兴趣的:(Spring)