Tomcat源码---启动.初始化(加载类包)分析三
一,启动
Tomcat是从org.apache.catalina.startup.Bootstrap#main()开始启动.代码如下:
?
?
?从以上可以很清楚的看懂tomcat是通过参数的不同进行相应的命令调用.
?启动之前要进行相应的init()初始化,进行相应的环境设置以及包的加,以下我们查看下init的方法.
二,初始化(Bootstrap#init())
?
?根据以上的设置tomcat主要对类加载作了以下方式:
?
b) Load startup class (reflection)
org.apache.catalina.startup.Catalina
setParentClassloader -> sharedLoader
Thread.contextClassloader -> catalinaLoader
---------------------------------------------------
以下对java中的类加载进行归纳:
可参考文章:http://blog.chenlb.com/2009/06/java-classloader-architecture.html
?
以上用线程设置classloader的目的是:
java默认的线程上下文类加载器是 系统类加载器(AppClassLoader)。
?
?? 使用Thread.currentThread().setContextClassLoader(classloader)时,线程上下文 Classloader就变成了指定的Classloader了。此时,在本线程或子线程的任意一处地方,调用Thread.currentThread(). getContextClassLoader(),都可以得到前面设置的Classloader。
?
如果要扩展classloader对类包进行加载也可扩展URLCloassLoader类
?