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

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

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

20191017100204\_1.png

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

20191017100204\_2.png

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

20191017100204\_3.png

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

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

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

20191017100204\_4.png20191017100204\_5.png

org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource

20191017100204\_6.png

con目录下2个子目录

20191017100204\_7.png

20191017100204\_8.png

递归所有的目录

20191017100204\_9.png

继续

20191017100204\_10.png

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

20191017100204\_11.png

然后进入到

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

20191017100204\_12.png

进入processAnnotationsStream

20191017100204\_13.png

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

20191017100204\_14.png

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

20191017100204\_15.png

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

20191017100204\_16.png

java.io.DataInputStream.readInt()

20191017100204\_17.png

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

20191017100204\_18.png

回到processAnnotationsStream

20191017100204\_19.png

org.apache.catalina.startup.ContextConfig.checkHandlesTypes

20191017100204\_20.png

org.apache.catalina.startup.ContextConfig.populateJavaClassCache

20191017100204\_21.png

populateJavaClassCache(javaClass.getSuperclassName());

20191017100204\_22.png

父类java/lang/Object.class

20191017100204\_23.png

回到checkHandlesTypes

20191017100204\_24.png

回到processAnnotationsStream

20191017100204\_25.png

回到processAnnotationsWebResource

20191017100204\_26.png

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

20191017100204\_27.png

javaClassCache增加了com.alipay.sign.Base64

20191017100204\_28.png

如此这般

20191017100204\_29.png

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

20191017100204\_30.png

org.apache.catalina.startup.ContextConfig.webConfig()20191017100204\_31.png

20191017100204\_32.png

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

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

20191017100204\_33.png

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

20191017100204\_34.png

org.apache.catalina.core.StandardContext的addServletContainerInitializer方法

20191017100204\_35.png

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

20191017100204\_36.png

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

20191017100204\_37.png

fireLifecycleEvent

20191017100204\_38.png

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

20191017100204\_39.png

org.springframework.web.SpringServletContainerInitializer.onStartup

20191017100204\_40.png

得到List initializers

20191017100204\_41.png

下面是分别对SecurityWebInitializer和SpingWebInitializer

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


来源:[]()

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring源码分析【1】-Tomcat的初始化

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏