美文网首页基础web
Tomcat拾遗--BootStrap类的静态代码块和反射调用C

Tomcat拾遗--BootStrap类的静态代码块和反射调用C

作者: 简书徐小耳 | 来源:发表于2019-01-21 11:41 被阅读27次

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

    BootStrap类的静态代码块的意义

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

    反射调用Catalina的意义

    至于 为啥要使用反射调用catalina,那是因为 我们通过catalinaLoader生成Catalina类,那么接下来的tomcat使用到的类 默认都会使用catalinaLoader加载,而对于我们webapp下面的则使用我们的shareLoader去加载。 这样的好处就是如果我们在我们项目中使用到了tomcat在catalina中使用到的类,那么因为classloader不一样 所以做到类的隔离,否组会存在版本冲突 .
    补充:这边catalina最终还是有appclassloader加载,那么我们在catalina里面用到的类如果只想给tomcat自己使用,我们会去使用使用线程上下文去加载,因为catalina的classloader无法去加载子类的catalinaLoader的class,所以只能使用线程上下文的类加载器

    相关文章

      网友评论

        本文标题:Tomcat拾遗--BootStrap类的静态代码块和反射调用C

        本文链接:https://www.haomeiwen.com/subject/utzqjqtx.html