美文网首页
类加载以及执行子系统的案例与实战

类加载以及执行子系统的案例与实战

作者: 简书徐小耳 | 来源:发表于2018-11-25 12:56 被阅读4次

tomcat:正统的类加载器架构

  • commonclasloaer:加载放在common目录中的类:可以被tomcat和所有的web程序共同使用

  • catalinaclassloader:放在server目录中,类库可以被tomcat使用,但是对所有的web程序都不可见

  • sharedclassloader:放在shared目录,类库可以被所有的web程序共同使用。但是对tomcat不可见

  • wepappclassloader:放在webapp/WEB-INFO,每一个应用 使用一个单独的webappclassloader


    1.png
  • spring 放在common或者shared通过线程上下文的类加载器去获取web应用的class

总结:
commonclasloaer,catalinaclassloader,sharedclassloader是按照传统的双亲加载模式,加载指定目录的类,而webappclassloader,则释放没有这样实现,其具体的如下(这样写的好处就是可以隔离每个应用):
webappclassloader的加载过程
首先检测webappclassloader是否已经加载过了该类
如果没有在检测jvm是否已经加载过该类
如果没有我们尝试用扩展类去加载这样就避免了我们jdk的核心类被我们webappclassloader
给覆盖。
如果加载失败,或者不需要扩展类去加载我们根据类名判断
是否需要交给我们的父类进行加载(也就是所谓sharedclassloader)
如果不需要 则我们自己加载
如果我们自己加载失败 则我们尝试让sharedclassloader加载
如果还是失败则抛出异常

相关文章

网友评论

      本文标题:类加载以及执行子系统的案例与实战

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