双亲委派机制
1、双亲委派机制
当一个类加载器收到一个类的加载请求时,它首先不会自己尝试去加载它,会给它的父加载器去完成,层一层的委派,因此所有的加载请求最终都会传送到顶层启动类加载器中,只有当父加载器反馈无法加载这个类的时,子类加载器才会尝试自己去加载。
正常加载类的流程,按照AppClassLoader->ExtensionClassLoader->BootStrapClassLoader这个顺序加载。
如果不遵循上述这个过程,就是打破双亲委派机制了。双亲委派机制过程都是在loadClass中实现的。如果想要打破这种机制,就要重写其中的loadClass方法,使其不能进行双亲委派机制。
例子:
Tomcat是web容器,一个web容器可能需要可能需要部署多个应用程序,不同应用程序,不同应用程序可能会依赖同一个第三方库的不同版本,但是不同版本中某一个类的全路径名可能是一样的,比如多个应用依赖test.jar,但是A应用依赖的是1.0版本,B是2.0版。这两个版本中都有一个类是com.test.xxx。如果采用默认双亲委派机制是会避免加载同一个类的,所以Tomcat必须破坏打破双亲委派机制,为每个容器提供了一个webAppClassLoader加载器。每个自定义类加载器重写了loadClass方法,会优先加载当前应用下的类,加载不到时再交给父类去加载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)