Java类加载器回顾
2024-09-08 13:38:27
Java类加载采用了全盘委托机制,默认加载类时子类先会委托给父类加载,但父类加载不到时,子类才会自己尝试加载类。这种机制可以有效防止一个类被加载多次,同时也一定程度上防止重写JDK自身的类【Java自身要限制java开头的包下的类只能有根加载器加载】。但这种模式无法解决以下问题:
1、Java SPI应用场景,接口核心代码有根加载器加载,但接口实现类由第三方实现,在classpath下根加载器无法加载,同时根加载器无法委托它的子孙类加载器来加载这个类【它也不知道其子孙类加载器的存在?】,如何解决这个问题?使用线程上下文加载器,在根加载器加载的SPI接口代码部分,通过获取线程上下文类加载器实例【默认是系统类加载器】,用它来加载具体实现类,然后获取到类对象即可。
2、WEB容器的类加载需求,一般WEB容器的类加载要实现各应用不同类的隔离,同时也要能实现各应用公用类库的共享;要实现web应用与容器自身的类库的隔离与共享。因此它也不能完全使用父类委托加载机制实现。一般做法是各应用的类加载器首先在自己的目录下尝试加载类,加载不到再去请求父类加载该类【应用自身的类库优先于公用类库被加载】。Tomcat自身类加载机制设计时也遵循这样的思想,默认情况下web应用自身目录下的类库有应用类加载器加载,common共享目录下的类库有common类加载器加载。
最新文章
- jQuery为开发插件提拱了两个方法:jQuery.fn.extend(); jQuery.extend();
- oracle 开窗分析函数和树形结构
- Nginx HA 及https配置部署
- JdbcTemplate三种常用回调方法
- Xamarin.Android开发实践(十二)
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
- 浏览器渲染原理--reflow
- android中的数据库操作
- Extmail maildrop错误
- 读取Excel任务列表并显示在Outlook日历上
- sort merge join导致temp被爆菊
- Away3d 基础 1 ---对一个简单类的解释
- AS3性能及Flex-Formatting设置问题
- Spire.Barcode好用的条码生在组件
- DRP之Oracle_11g数据库安装
- IP通信基础学习第七周(下)
- 自学自用 = B站(操作系统_清华大学(向勇、陈渝)) 未完待续。。
- GMap.net控件学习记录
- yii2 内置事件
- windows下用wampServer 为wordpress 搭建本地服务器运行环境