Tomcat的关于Web应用的类加载器

类加载器的补充

 

一 类加载器的结构

二 类加载器的源码

源码视频

  1. ClassLoader: 类加载器的基础实现,双亲委派就是这里实现的

  2. SecureClassLoader: 安全相关的类加载器

  3. URLClassLoader:类加载器用于从同时引用JAR文件和目录的URL的搜索路径加载类和资源: 安全相关的类加载器

  4. AppClassLoader: Java应用的基础类加载器,自定义的类加载器如果不指定Parent,那么Parent就默认为这个。

  5. WebappClassLoaderBase: 专门的Web应用程序类加载器。 该类加载器是JDK中URLClassLoader的完全重新实现。 尽管它的内部行为可能完全不同,但它设计为与常规URLClassLoader完全兼容。

    1. 实施说明-默认情况下,此类加载器遵循规范要求的委托模型。 首先将查询系统类加载器,然后是本地存储库,然后才进行向父类加载器的委派。 这允许Web应用程序覆盖除J2SE中的类之外的任何共享类。 JAXP XML解析器接口,JNDI接口和Servlet API中的类提供了特殊处理,这些从未从webapp存储库中加载。 delegate属性允许应用程序修改此行为,以将父类加载器移到本地存储库之前。

    2. 实施说明-由于Jasper编译技术的限制,类加载器将忽略包含Servlet API中的类的任何存储库。

    3. 实施说明-类加载器会在从JAR文件加载类时生成包含完整JAR URL的源URL,即使在类包含在JAR中时,也允许在类级别设置安全权限。

    4. 实施注意事项-按照通过初始构造函数添加本地存储库的顺序搜索本地存储库。

    5. 实施说明-除非有安全管理人员,否则不检查密封违规或安全性。

    6. 实施说明-从8.0开始,此类加载器实现InstrumentableClassLoader ,从而允许Web应用程序类对同一Web应用程序中的其他类进行检测。 它不允许检测系统或容器类或其他Web应用程序中的类

  6. ParallelWebappClassLoader: 并行Webapp类加载器

  7. WebappClassLoader: Webapp类加载器

三 Web应用启动时的类加载器初始化

  1. 启动Context StandardContext.startInternal();

  2. 获取Loader(类加载器的包装类)loader = getLoader() == null?new WebappLoader():null;

  3. 获取Web应用的类加载器包装类 Loader loader = getLoader();

  4. 启动Loader(类加载器包装类) ((Lifecycle) loader).start();

    1. WebappLoader.startInternal();

    2. 创建类加载器(WebappClassLoaderBase) classLoader = createClassLoader();

    3. 启动类加载器 classLoader.start(); WebappClassLoaderBase实现的Lifecycle

    4. 绑定类加载器 oldCCL = bindThread(); → Thread.currentThread().setContextClassLoader(webApplicationClassLoader);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值