美文网首页基础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

    首先我们需要知道一个潜规则:即如果我们在A类中调用B类,如果B类没有被classloader加载或者就算加载了 但...

  • Java基础整理(三)

    理论基础 类的代码块种类: 静态代码块 初始化块 构造方法 类的继承 调用顺序 首先调用父类静态代码块 然后调用子...

  • java 类的代码块加载顺序

    输出结果: 总结:父类静态代码块——子类静态代码块——父类代码块——父类构造——子类代码块——子类构造。类的静态代...

  • 静态代码块

    静态代码块,当类第一次加载的时候,会调用这个静态代码块的内容。 // Account.java文件package ...

  • 构造函数 非静态代码块 构造函数的执行顺序

    执行结果 父类--静态代码块子类--静态代码块父类--非静态代码块父类--构造函数子类--非静态代码块子类--构造函数

  • 猿学-java有什么用java基础技术总结

    加载顺序 父类静态成员->父类静态代码块-> 子类静态成员->子类静态代码块-> 父类普通成员->父类代码块->父...

  • unity3d c#调用java

    c#调用java非静态方法 C#调用静态类,静态方法 ; CustomClass的静态类,SetData是它的静...

  • 静态块和匿名块

    匿名代码块:在每次调用构造器创建对象之前执行 静态代码块:在类首次被加载的时候执行 Father类 public ...

  • Java执行顺序

    父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函...

  • 反射机制(四)操作方法

    获取方法: 调用方法 问题一答案: 使用反射调用可变参数 使用反射调用静态方法: 静态方法不属于任何对象,属于类本...

网友评论

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

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