首先看下Catalina这个类中主要的方法:
说白了,也就是启动、等待、停止几种情况,说到Catalina,不得不提到Bootstrap,这两个类可谓互为唇齿。
Bootstrap是为加载Catalina而准备的一套线程守护类,之所以绕个弯路需要通过Bootstrap来加载,这是因为某些依赖jar包或者加载器(比如:XML parser)需要灵性加载。为了松耦合性,在启动了时候,就包装了一个叫做Bootstrap的东东。
来看下Bootstrap中的start和stop
![](https://i-blog.csdnimg.cn/blog_migrate/b9551e4470941b9f23ec619da0bf1c35.png)
在start方法里用到了init()方法,我们看下具体实现:
IT学习者(www.itxxz.com)
- /**
- * Initialize daemon.
- */
- public void init() throws Exception {
- initClassLoaders();
- Thread.currentThread().setContextClassLoader(catalinaLoader);
- SecurityClassLoad.securityClassLoad(catalinaLoader);
- // Load our startup class and call its process() method
- if (log.isDebugEnabled())
- log.debug("Loading startup class");
- Class<?> startupClass =
- catalinaLoader.loadClass
- ("org.apache.catalina.startup.Catalina");
- Object startupInstance = startupClass.newInstance();
- // Set the shared extensions class loader
- if (log.isDebugEnabled())
- log.debug("Setting startup class properties");
- String methodName = "setParentClassLoader";
- Class<?> paramTypes[] = new Class[1];
- paramTypes[0] = Class.forName("java.lang.ClassLoader");
- Object paramValues[] = new Object[1];
- paramValues[0] = sharedLoader;
- Method method =
- startupInstance.getClass().getMethod(methodName, paramTypes);
- method.invoke(startupInstance, paramValues);
- catalinaDaemon = startupInstance;
- }
到这里可以清楚的看到,用到了大量的Class、getClass()、classLoad这种字眼,
说明在初始化的时候需要加载很多配置文件的,也就是引用tomcat的lib下jar包里的class类。
至此便可以理解为何在前一篇中通过Catalina来启动tomcat时,会加载很多相关的jar依赖了: