打破双亲委派

SPI:Service Provider Interface

双亲委派机制目的防止类重复加载,使得类加载具有优先级的层次关系

当装载的类引用另一个类时,虚拟机使用装载第一个类的类装载器转载被应用的类,这种情况下会出现不合适的加载器去加载被引用的类;SPI就是因此产生

     https://blog.csdn.net/qq_18251707/article/details/104156040

BootStrapClassLoader加载DriverManager,通过线程上下文类加载器加载com.mysql.cj.jdbc.Driver,父类加载器请求子类加载器完成类加载的行为

å¨è¿éæå¥å¾çæè¿°

不需要手动设置驱动为*.Driver,父类加载器加载的类看不到子类加载器加载的类,采用自己传入的loader结合thread.setContextLoader将*Driver加载到内存

https://segmentfault.com/a/1190000020858126

 

tomcat

通过war包发布应用,类加载器层次结构

负责Web应用的类加载的是org.apache.catalina.loader.WebappClassLoader,它几个比较重要的方法findClass(),loadClass(),findClassInternal(),findResourceInternal()

tomcat调用bootstrap启动时会调用initClassLoaders创建commonLoader、catalinatLoader、sharedLoader,如上图这遵循了双亲委派,各自加载对应路径下的jar

在standardContext的startInternal方法开启web应用时创建类加载器;在webAppClassLoader的父类webAppClassLoaderBase中

     实现start方法(加载web应用all的class文件lib目录下jar文件)

     重写了loadClass:首先尝试加载jre下的类流程不变,web应用据设置选择先加载自己应用下的class文件还是tomcatlib目录下的class文件

jdk不推荐重写loadClass,一般是重写findClass,这样可保持双亲委派机制而loadClass加载规则自己定义so可随便造

https://segmentfault.com/a/1190000020858126 分类不错

https://blog.csdn.net/qq924862077/article/details/78417398讲解的不错

https://blog.csdn.net/weisong530624687/article/details/50960879?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase注释很详细

 

OSGI

用户对程序动态性的追求:代码热替换、模块热部署

每个模块Bundle有自己的类加载器,需要更换bundle时把bundle连同类加载器一起换掉,此环境下类加载器发展为网状结构,当受到类加载请求时:

https://baike.baidu.com/item/OSGI/16158?fr=aladdin

https://www.baidu.com/s?wd=OSGI&rsv_spt=1&rsv_iqid=0xcad08d8d002f4a99&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=4&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=2698&rsv_sug4=2698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值