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

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

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

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

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

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

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

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

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

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

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

org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource

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

con目录下2个子目录

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

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

递归所有的目录

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

继续

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

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

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

然后进入到

else if (webResource.isFile() &&
                webResource.getName().endsWith(“.class”))

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

进入processAnnotationsStream

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

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

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

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

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

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

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

java.io.DataInputStream.readInt()

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

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

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

回到processAnnotationsStream

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

org.apache.catalina.startup.ContextConfig.checkHandlesTypes

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

org.apache.catalina.startup.ContextConfig.populateJavaClassCache

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

populateJavaClassCache(javaClass.getSuperclassName());

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

父类java/lang/Object.class

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

回到checkHandlesTypes

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

回到processAnnotationsStream

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

回到processAnnotationsWebResource

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

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

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

javaClassCache增加了com.alipay.sign.Base64

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

如此这般

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

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

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

org.apache.catalina.startup.ContextConfig.webConfig()《Spring源码分析【1】-Tomcat的初始化》

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

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


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

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


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

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


org.apache.catalina.core.StandardContextaddServletContainerInitializer方法

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

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

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

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

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

fireLifecycleEvent

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

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

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

org.springframework.web.SpringServletContainerInitializer.onStartup

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

得到List<WebApplicationInitializer> initializers

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

下面是分别对SecurityWebInitializerSpingWebInitializer

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

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/unix21/article/details/52153806
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞