Bundle类加载器:classloader

本文探讨了OSGI框架中的动态模块化开发,重点在于Bundle之间的依赖性设计。介绍了如何通过export package和import package来实现类的共享,并详细解析了OSGI中类加载器的工作机制,包括parent classloader和系统classloader的角色。此外,还提到了bundle的版本控制和元数据匹配,以实现更精确的包导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始投入时间,进行OSGI的学习,买了林昊的《OSGI的原理与实践》,并且参考51cto上的文章等其他资料,来整理知识

 

OSGI的动态模块性开发,很大程度在于OSGI中Bundle之间依赖性的设计方案,我个人认为这是OSGI 中一个很有价值的地方,

 

在我们平时的web开发中,虽然说是模块性开发,但是那种依赖设计,不是真正的模块,达不到即插即用,及删及无得效果;

 

而在OSGI规范中,则可以实现这种“理想中”的模块化,达到了,物理上脱离的模块开发。

 

 

回到Bundle之间依赖性的问题上来,

bundle之间类的共享:

通过 export package的方式实现的,在bundle的manifest中通过制定export package的方式将特定的package与其他的bundle共享。

而引用其他bundle所暴露的package有两种方式,第一是通过 import package的方式,第二种是通过required bundle的方式

 

OSGi容器为每个Bundle创建不同的classloader,

 

因此每个Bundle能访问位于下列位置中的类:

a) 位于Java启动类路径下的、所有以Java.*开头的包中的类;

b) 位于OSGi框架类路径下的类,通常有一个独立的类加载器负责加载框架的实现类及关键的接口类;

c) 位于Bundle空间中的类,这些类通常包含在与Bundle相关的jar文件中,以及加到这个Bundle中的其它jar包中的类。

d) 导入包中的类

 

 

当然整个OSGI容器,不能仅仅为每个B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值