Java 中类加载的双亲委派模型怎么在基础库扩展时提供灵活性

云强姑娘_6864

云强姑娘_6864

2026-09-15

567人浏览

原创

双亲委派模型通过分层职责、tccl、模块化和自定义加载器实现安全扩展:启动类加载器管java.,平台类加载器管javax.及标准模块,应用类加载器管用户代码;tccl提供spi动态加载通道;模块系统强化委派策略;自定义加载器仅重写findclass并指定父加载器,确保委派链不变。

java 中类加载的双亲委派模型怎么在基础库扩展时提供灵活性

双亲委派模型本身是为保障安全与一致性而设计的,看似严格,但恰恰在基础库扩展时提供了可控的灵活性——不是靠打破它,而是通过分层职责和标准接口,在不牺牲核心稳定性的前提下支持扩展。

类加载器分层天然支持扩展边界

启动类加载器只管 java.*,扩展类加载器(Platform ClassLoader)负责 javax.* 和平台模块(如 java.sqljava.xml),应用类加载器则专注用户代码。这种分工意味着:

  • 新增基础功能(比如一个新标准 API 模块)可直接放入 JAVA_HOME/lib 或模块路径,由平台加载器自动识别,无需修改任何应用代码
  • 厂商或框架提供的扩展(如 JDBC 驱动、JAXP 实现)可放在 lib/ext 或通过 --module-path 加载,它们被平台层统一管理,对应用透明
  • 用户升级 JDK 后,只要遵循模块声明和导出规则,原有扩展仍能被正确委派加载,兼容性有保障

线程上下文类加载器(TCCL)提供扩展钩子

当基础库需要动态加载用户提供的实现(例如 SPI 机制中的 ServiceLoader),它不能依赖当前类的加载器(可能是 Bootstrap 或 Platform),而需借助 TCCL:

Java Development Manual
Java Development Manual

Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...

下载
  • ServiceLoader.load(Service.class) 内部会调用 Thread.currentThread().getContextClassLoader()
  • 应用启动时通常将 AppClassLoader 设为 TCCL,这样基础库就能“向下”加载用户自定义的实现类
  • 这是对双亲委派的补充而非破坏:委派链保持不变,只是在需要时引入一条“反向信任通道”

模块系统(Jigsaw)强化了扩展语义

JDK 9+ 的模块化不是绕过双亲委派,而是将其升级为更精细的委派策略:

  • 每个模块声明 requiresexports,类加载器按模块依赖图决定是否委派、向谁委派
  • 可通过 --add-opensaddReads 在运行时动态放宽封装限制,让扩展库能访问内部 API(需明确授权)
  • 平台模块(如 java.base)仍由 Bootstrap 加载,但用户模块可独立编译、部署、升级,基础库只需面向接口编程

自定义加载器在扩展点上保持委派契约

若需加载加密字节码、远程类或热更新类,自定义类加载器应继承 ClassLoader 并重写 findClass,但必须保留 loadClass 的默认逻辑:

  • 不重写 loadClass,确保委派行为不变;只覆盖 findClass 去定义“自己怎么找字节码”
  • 构造时显式指定父加载器(如 super(ClassLoader.getSystemClassLoader())),保证核心类仍走标准路径
  • 这样既支持特殊加载逻辑,又不干扰 StringArrayList 等基础类的加载一致性

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

8637

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

5842

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5252

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

964

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

808

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1136

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2289

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19631

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1035

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习