双亲委派模型是 Java 类加载器(ClassLoader)的一种设计机制: ✅ 避免重复加载
✅ 保证核心类安全、避免被篡改
✅ 提高类加载效率
类加载请求从子加载器逐级向上委托父加载器,只有父加载器加载失败(ClassNotFoundException)后,子加载器才会尝试自己加载。
当某个类加载器接收到类加载请求时:
1️⃣ 先检查自己是否加载过(缓存)
2️⃣ 没加载过,委托父加载器加载
3️⃣ 父加载器继续递归往上,直到 Bootstrap ClassLoader
4️⃣ 如果父加载失败(找不到类),再由自己尝试加载
类加载器 | 加载内容 |
---|---|
Bootstrap ClassLoader (启动类加载器) | 加载 JVM 核心类(rt.jar 、java.* ) |
Extension ClassLoader (扩展类加载器) | 加载 ext 目录下的 jar 包 |
App ClassLoader (应用类加载器) | 加载 classpath 下的类 |
自定义 ClassLoader | 加载自己定义的路径或远程资源 |
同一个类,只能被加载一次,优先由父加载器加载,保证唯一性。
防止核心类库(java.lang.String
)被自定义类覆盖,避免恶意攻击。
下层只管业务类,核心类交给上层加载,职责明确。
破坏场景:
✅ 这些场景下会用到 自定义类加载器,选择不走双亲委派,直接加载业务类。
Q:什么是双亲委派机制?为什么需要它?
A:双亲委派模型是 Java 类加载器的核心设计思想。类加载器在加载类时,优先委托父加载器尝试加载,只有父加载器找不到时,子加载器才会自己加载。这样设计可以避免类的重复加载,保证核心类库的安全性,防止被篡改。同时提高了加载效率,符合高内聚低耦合设计原则。
双亲委派本质是“优先父加载,失败自加载”,既保证了类的唯一性和安全性,又支撑了 JVM 模块化和高效运行。