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源码分析【2】-Tomcat
- 下一篇: Spring源码分析【5】-Spring