new关键字发生了什么系列补充(OSGi类加载机制)

前言

OSGi是基于Java语言的动态模块化规范

特点:

  • 模块划分、可见性控制更精确
  • 模块级热插拔

0x01 基础知识

Bundle:OSGi中的每个模块称为Bundle,与普通java类库区别不大,都通过jar格式封装,内存存储java package和class。一个Bundle可以生命它所依赖的java package(Import-Package),也可以声明它允许导出发布的java package(Export-Package)

依赖关系:Bundle之间的依赖关系从上层模块依赖底层模块->平级模块之间的依赖,只有Export的Package才能由外界访问,其他会隐藏起来。

热插拔:实现程序模块级的热插拔功能,可以只停用、重新安装然后启用程序中的其中一部分

0x02 Bundle类加载器规则

没有固定的委派关系

某个Bunlde A声明了一个它依赖的Bundle B的Package,如果Bundle B声明发布了这个Package,那么对这个Bundle B的Package的类加载动作都会委派给发布它的Bundle B类加载器去完成

只有使用某个Package或Class的使用,Bundle之间才存在委派和依赖关系,其余时间平级

类加载查找规则

  • 以java.*开头的类,委派给父类加载器加载
  • 否则,委派列表名单内的类,委派给父类加载器加载
  • 否则,Import列表中的类,委托给Export这个类的Bundle类加载器去加载
  • 否则,查找当前Bundle的Classpath,使用自己的类加载器加载
  • 否则,查找是否在自己的Fragment Bundle中,如果是,则委派给Fragment Bundle的类加载器加载
  • 否则,查找Dynamic Import列表的Bundle,委派给对应Bundle的类加载器
  • 否则,类加载失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值