Java类加载采用了全盘委托机制,默认加载类时子类先会委托给父类加载,但父类加载不到时,子类才会自己尝试加载类。这种机制可以有效防止一个类被加载多次,同时也一定程度上防止重写JDK自身的类【Java自身要限制java开头的包下的类只能有根加载器加载】。但这种模式无法解决以下问题:

1、Java SPI应用场景,接口核心代码有根加载器加载,但接口实现类由第三方实现,在classpath下根加载器无法加载,同时根加载器无法委托它的子孙类加载器来加载这个类【它也不知道其子孙类加载器的存在?】,如何解决这个问题?使用线程上下文加载器,在根加载器加载的SPI接口代码部分,通过获取线程上下文类加载器实例【默认是系统类加载器】,用它来加载具体实现类,然后获取到类对象即可。

2、WEB容器的类加载需求,一般WEB容器的类加载要实现各应用不同类的隔离,同时也要能实现各应用公用类库的共享;要实现web应用与容器自身的类库的隔离与共享。因此它也不能完全使用父类委托加载机制实现。一般做法是各应用的类加载器首先在自己的目录下尝试加载类,加载不到再去请求父类加载该类【应用自身的类库优先于公用类库被加载】。Tomcat自身类加载机制设计时也遵循这样的思想,默认情况下web应用自身目录下的类库有应用类加载器加载,common共享目录下的类库有common类加载器加载。

Java类加载机制

Java类加载器ClassLoader总结

深入浅出ClassLoader

最新文章

  1. jQuery为开发插件提拱了两个方法:jQuery.fn.extend(); jQuery.extend();
  2. oracle 开窗分析函数和树形结构
  3. Nginx HA 及https配置部署
  4. JdbcTemplate三种常用回调方法
  5. Xamarin.Android开发实践(十二)
  6. 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
  7. 浏览器渲染原理--reflow
  8. android中的数据库操作
  9. Extmail maildrop错误
  10. 读取Excel任务列表并显示在Outlook日历上
  11. sort merge join导致temp被爆菊
  12. Away3d 基础 1 ---对一个简单类的解释
  13. AS3性能及Flex-Formatting设置问题
  14. Spire.Barcode好用的条码生在组件
  15. DRP之Oracle_11g数据库安装
  16. IP通信基础学习第七周(下)
  17. 自学自用 = B站(操作系统_清华大学(向勇、陈渝)) 未完待续。。
  18. GMap.net控件学习记录
  19. yii2 内置事件
  20. windows下用wampServer 为wordpress 搭建本地服务器运行环境

热门文章

  1. Kermit,Xmodem,1K-Xmodem,Ymodem,Zmodem传输协议小结
  2. C# 将链表存入二进制文件及读取二进制文件得到链表示例
  3. C/C++中怎样获取日期和时间
  4. mysql 查看当前连接数
  5. GIS+=地理信息+行业+大数据——纽约公开11亿条出租车和Uber原始数据下载及分析
  6. git操作演示
  7. Python--常用模块部分
  8. bzoj1458 士兵占据
  9. Android判断TextView是否超出加省略号
  10. MySQL 存储过程 (2)