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

类加载器的补充

一 类加载器的结构

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

二 类加载器的源码

源码视频

  1. ClassLoader: 类加载器的基础实现,双亲委派就是这里实现的
  2. SecureClassLoader: 安全相关的类加载器
  3. URLClassLoader:类加载器用于从同时引用JAR文件和目录的URL的搜索路径加载类和资源: 安全相关的类加载器
  4. AppClassLoader: Java应用的基础类加载器,自定义的类加载器如果不指定Parent,那么Parent就默认为这个。
  5. WebappClassLoaderBase: 专门的Web应用程序类加载器。 该类加载器是JDK中URLClassLoader的完全重新实现。 尽管它的内部行为可能完全不同,但它设计为与常规URLClassLoader完全兼容。
  6. 实施说明-默认情况下,此类加载器遵循规范要求的委托模型。 首先将查询系统类加载器,然后是本地存储库,然后才进行向父类加载器的委派。 这允许Web应用程序覆盖除J2SE中的类之外的任何共享类。 JAXP XML解析器接口,JNDI接口和Servlet API中的类提供了特殊处理,这些从未从webapp存储库中加载。 delegate属性允许应用程序修改此行为,以将父类加载器移到本地存储库之前。
  7. 实施说明-由于Jasper编译技术的限制,类加载器将忽略包含Servlet API中的类的任何存储库。
  8. 实施说明-类加载器会在从JAR文件加载类时生成包含完整JAR URL的源URL,即使在类包含在JAR中时,也允许在类级别设置安全权限。
  9. 实施注意事项-按照通过初始构造函数添加本地存储库的顺序搜索本地存储库。
  10. 实施说明-除非有安全管理人员,否则不检查密封违规或安全性。
  11. 实施说明-从8.0开始,此类加载器实现InstrumentableClassLoader ,从而允许Web应用程序类对同一Web应用程序中的其他类进行检测。 它不允许检测系统或容器类或其他Web应用程序中的类
  12. ParallelWebappClassLoader: 并行Webapp类加载器
  13. 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();
  5. WebappLoader.startInternal();
  6. 创建类加载器(WebappClassLoaderBase) classLoader = createClassLoader();
  7. 启动类加载器 classLoader.start(); WebappClassLoaderBase实现的Lifecycle
  8. 绑定类加载器 oldCCL = bindThread(); → Thread.currentThread().setContextClassLoader(webApplicationClassLoader);

posted @
2022-08-24 11:35 菜阿

阅读(
18

) 评论(
) 编辑

Original: https://www.cnblogs.com/xysgo/p/16619298.html
Author: 菜阿
Title: Tomcat的关于Web应用的类加载器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601510/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球