Bundle原来是和传统的Jar包是有区别的,它不只包括了Jar包还包括了其它资源。其中最主要就是头文件(MANIFEST.MF)了,这个文件存储了Bundle的元数据信息,而加载类过程正是靠这个头文件信息。
例如:在Equnix中,我们要安装Bundle A,首先就是要安装Bundle A,其实就是读取A的头文件中的详细信息,然后把元数据放到BundleDescription中,接着就是重要的一步啦。加载,通过读取安装的结果 BundleDescription,框架了解到应该如何从那里(URL)去加载支撑A的Bundle,然后是Bundle B。如果找到Bundle B,那B又在重复A的过程。直到把必须的Bundle都加载完,那Bundle A就已经为启动作好准备,其就处于RESOLVED状态。
上面很粗的说了Bundle的加载过程,那么Bundle的加载过程Class是怎样的呢?其过程共使用了三种加载机制,说白就只有一种-----委派加载。
首先,加载java.*类,有则委派给Parent ClassLoader,否则判断是否属于boot delegation配置,否,则又交回给Parent ClassLoader。也就是说这两步,只使用了一种加载Parent ClassLoader。
接着判断Bundle是否是属于Import或者Require的,如果是,则交由export Bundle去加载,也就是说支撑插件,就交由支撑插件自己来加载。其实也就是说委派给各自的插件加载。因为OSGI定义了每个Bundle都拥有独立的 ClassLoader。
如果还找不到类,就再去找classpath,有两种classPath。Bundle和Fragment的。不过都是通过classPath来搜索类的。
这里还得强调一下,也有可能加载的是属于向外提供的,如果是,会抛出 NoClassDefFoundException。
上面的过程是一个静态加载过程。如果静态加载还没找到,而且还存在动态加载的需要,动态加载,就直接交由支撑插件加载。
各位,指点一下,谢谢。初学者的真心感谢。
分享到:
相关推荐
总的来说,理解OSGi的概念和机制,掌握bundle的创建和管理,以及如何在实际项目中利用其动态性和模块化优势,是学习OSGi的关键。通过实践和不断探索,你将能够充分利用OSGi来构建更高效、更灵活的Java应用。
4. **基于OSGi搭建分布式系统**:分布式系统架构是现代软件开发的趋势之一,OSGi提供了良好的支持。文档通过实例需求,指导读者如何搭建基于OSGi的分布式系统的脚手架,并完成了实例的实现。 5. **系统重构为基于...
OSGi的核心之一是服务注册与发现机制。`OSGITest1`可能包含了一个或多个服务接口,以及实现了这些接口的类。服务可以通过BundleContext注册,其他Bundle则可以通过服务注册表查找并使用这些服务。 4. **启动和管理...
### SpringDM与OSGI概述 #### OSGI概念解析 OSGI(Open Service Gateway Initiative),直译为“开放的服务网关初始化”,它是一系列针对Java...此外,合理规划服务的启动顺序也是保证应用稳定运行的关键因素之一。
随着时间的发展,OSGi已经成为Java平台上模块化开发的重要标准之一,并被广泛应用于企业级应用开发、物联网、云计算等领域。 总之,OSGi不仅是一个技术标准,更是一个完整的开发平台,它为企业级软件开发带来了灵活...
2. **Service Registry**:服务注册表是 OSGi 的关键组件之一,负责管理和存储服务对象的信息,使服务消费者能够查找并使用这些服务。 3. **Dynamic Import Package**:动态导入包机制允许 OSGi 束(bundle)在运行...
在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端开发。Equinox提供了一个强大的、可扩展的运行时环境,支持动态模块加载和卸载,使得开发者可以灵活地更新和...
org.eclipse.osgi-3.7.0.v20110613-sources.jar文件包含了org.eclipse.osgi的源代码,对于开发者来说,这是理解和学习OSGi框架内部运作的重要资源。通过阅读源码,我们可以看到如何创建和管理bundle,如何处理bundle...
注册服务是OSGi中的核心操作之一,它允许bundle向框架注册自己提供的服务。 **4.3 取消注册服务** 取消注册服务是指从OSGi服务注册表中删除服务。 **4.4 查找服务** 查找服务是指根据特定属性和服务类型查询可用...
1. **生命周期管理**:这是OSGI的核心功能之一,负责bundle的动态管理。它可以安装新的bundle,启动、停止、更新或卸载已存在的bundle,使得系统可以在运行时进行更改,无需重启。 2. **服务注册**:OSGI提供了一个...
OSGi服务是其核心特性之一,它允许组件之间通过声明服务接口来共享功能。服务注册、查找和绑定都是动态的,增强了系统的灵活性。例如,一个Bundle可以注册一个数据库连接服务,其他需要数据库连接的Bundle可以通过...
《深入理解OSGi》这本书,出自Java虚拟机权威专家周志明之手,将引领读者深入探究OSGi的核心概念、Equinox实现以及最佳实践。 1. **OSGi核心概念** - **模块化**:OSGi的核心是模块化系统,它将代码分解为独立的...
总结,OSGi服务是OSGi框架的核心特性之一,它使得模块间的通信变得简单且可控。通过对服务的理解和实践,开发者可以构建出更高效、更可维护的Java应用。通过深入研究源码和使用相关工具,我们可以更深入地掌握OSGi...
《深入理解Java虚拟机》是一本关于Java虚拟机(JVM)原理和实践的书籍,而OSGi最佳实践则是在此基础之上,着重讨论了如何将OSGi技术与Java虚拟机结合,以实现复杂软件系统的动态化和模块化管理。书中将包含如何构建...
3. **学习生命周期管理**:讲解OSGi中的生命周期管理模型,包括如何安装、启动、更新和卸载模块。 4. **研究服务**:详细介绍OSGi的服务框架,包括如何定义、注册和查找服务。 5. **深入探索模块化**:更深层次地...
3. **服务注册与发现**:OSGI的核心特性之一是服务导向架构,如何注册和查找服务,以及如何使用服务生命周期进行管理。 4. **动态性与生命周期**:OSGI允许模块在运行时加载、卸载和更新,解释了如何处理模块的启动...
OSGi的核心概念之一就是“扩展点”,这为开发者提供了一种灵活的方式来定义和使用插件。本文将通过实例深入讲解OSGi扩展点的概念、工作原理以及如何在实践中应用。 **一、OSGi扩展点基础** 1. **扩展点概念**:...