Tomcat拾遗--BootStrap类的静态代码块和反射调用Catalina的意义是什么

首先我们需要知道一个潜规则:即如果我们在A类中调用B类,如果B类没有被classloader加载或者就算加载了 但是该classloader和A类的classloader属于平行的,即我们在A的classloader中找不到B类的class,那么A会使用自己的classloader去加载B。

BootStrap类的静态代码块的意义

默认设置好catalina.base和catalina.home 这样commonClassloader 就可以被初始化好。

反射调用Catalina的意义

因为Bootstrap这个类在Tomcat打包发布时是放在bin\bootstrap.jar中,
而Catalina类是放在lib\catalina.jar中,两个jar是用不同的ClassLoader加载的,
所以不能在Bootstrap类中直接引用Catalina类,只能通过反射。
这也意味着 后续我们在tomcat的Catalina类里面启动的类默认都是使用catalinaLoader(除了我们的context使用webappclassloader去加载的),进而tomcat使用的类只能被tomcat自己使用,而不会被其他应用使用

你可能感兴趣的:(Tomcat拾遗--BootStrap类的静态代码块和反射调用Catalina的意义是什么)