Tomcat源码解析之catalina 、bootstrap

来源:互联网 发布:使命召唤ol有mac版吗 编辑:程序博客网 时间:2024/06/05 05:04

首先看下Catalina这个类中主要的方法:



说白了,也就是启动、等待、停止几种情况,说到Catalina,不得不提到Bootstrap,这两个类可谓互为唇齿。

Bootstrap是为加载Catalina而准备的一套线程守护类,之所以绕个弯路需要通过Bootstrap来加载,这是因为某些依赖jar包或者加载器(比如:XML parser)需要灵性加载。为了松耦合性,在启动了时候,就包装了一个叫做Bootstrap的东东。

来看下Bootstrap中的start和stop



在start方法里用到了init()方法,我们看下具体实现:
  IT学习者(www.itxxz.com)

  1. /** 
  2.  * Initialize daemon. 
  3.  */  
  4. public void init() throws Exception {  
  5.   
  6.     initClassLoaders();  
  7.   
  8.     Thread.currentThread().setContextClassLoader(catalinaLoader);  
  9.   
  10.     SecurityClassLoad.securityClassLoad(catalinaLoader);  
  11.   
  12.     // Load our startup class and call its process() method  
  13.     if (log.isDebugEnabled())  
  14.         log.debug("Loading startup class");  
  15.     Class<?> startupClass =  
  16.         catalinaLoader.loadClass  
  17.         ("org.apache.catalina.startup.Catalina");  
  18.     Object startupInstance = startupClass.newInstance();  
  19.   
  20.     // Set the shared extensions class loader  
  21.     if (log.isDebugEnabled())  
  22.         log.debug("Setting startup class properties");  
  23.     String methodName = "setParentClassLoader";  
  24.     Class<?> paramTypes[] = new Class[1];  
  25.     paramTypes[0] = Class.forName("java.lang.ClassLoader");  
  26.     Object paramValues[] = new Object[1];  
  27.     paramValues[0] = sharedLoader;  
  28.     Method method =  
  29.         startupInstance.getClass().getMethod(methodName, paramTypes);  
  30.     method.invoke(startupInstance, paramValues);  
  31.   
  32.     catalinaDaemon = startupInstance;  
  33.   
  34. }  


到这里可以清楚的看到,用到了大量的Class、getClass()、classLoad这种字眼,

说明在初始化的时候需要加载很多配置文件的,也就是引用tomcat的lib下jar包里的class类。

至此便可以理解为何在前一篇中通过Catalina来启动tomcat时,会加载很多相关的jar依赖了:


原创粉丝点击