zoukankan      html  css  js  c++  java
  • Tomcat ClassLoader机制

    每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类
    系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类
    可以使用Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为
    ClassLoader被组织成树形,一般的工作原理是:
    1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类
    2) contextClassLoader请求它的父ClassLoader来完成该载入请求
    3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入
    注意:WebAppClassLoader的工作原理和上述有少许不同:
    它先试图自己载入类(在ContextBase/WEB-INF/...中载入类),如果无法载入,再请求父ClassLoader完成
    由此可得:
    - 对于WEB APP线程,它的contextClassLoader是WebAppClassLoader
    - 对于Tomcat Server线程,它的contextClassLoader是CatalinaClassLoader
    类的查找
    ClassLoader类中loadClass方法为缺省实现,用下面的顺序查找类:
    1、调用findLoadedClass方法来检查是否已经被加载。如果没有则继续下面的步骤。
    2、如果当前类装载器有一个指定的委托父装载器,则用委托父装载器的loadClass方法加载类,也就是委托给父装载器加载相应的类。
    3、如果这个类装载器的委托层级体系没有一个类装载器加载该类,则使用类装载器定位类的特定实现机制,调用findClass方法来查找类。

  • 相关阅读:
    SQLite 基本使用
    SQLite 语法
    html5晋级之路-css介绍
    html5晋级之路-web storage
    html5晋级之路-元素语法
    html晋级之路-背景、实体
    ios-晋级之路 CocoaPods的使用
    如何在Mac OS X上安装 Ruby运行环境
    html5晋级之路-学习笔记表单
    html5晋级之路-学习笔记
  • 原文地址:https://www.cnblogs.com/longzhaoyu/p/5020891.html
Copyright © 2011-2022 走看看