`
wangchuanyin
  • 浏览: 33165 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

osgi的导入导出包

阅读更多
OSGI之Require-Bundle与Imported-Package
OSGI中的bundle在依赖其他的bundle的时候,有两种方式:Require-Bundle与Imported-Package。这里简单的讲讲他们之间的区别。
先看看基础的定义:
• Required-Bundle: Specify the list of plug-ins required for the operation of this plug-in.
• Imported-Package:Specify packages on which this plug-in depends without explicitly identifying their originating plug-in.
OSGI ClassLoader机制
Many bundles can share a single virtual machine (VM). Within this VM, bundles can hide packages and classes from other bundles, as well as share packages with other bundles.
Bundle共享Java虚拟机,这样的不同的bundle之间才能相互引用package。
The key mechanism to hide and share packages is the Java class loader that loads classes from a sub-set of the bundle-space using well-defined rules. Each bundle has a single class loader.
理解OSGI的Package import-export机制的关键在于明白每个bundle都有自己的Class Loader。
对于OSGI环境来说,它们是没有区别的。无论是Require-Bundle还是Imported-Package,前提都是需要把相关的packages先Export出。先看看OSGI下的ClassImport-Export关系:


区别
它们之间,仅仅只是依赖的颗粒度的区别。Required-Bundle依赖的是bundle,而Import-Package依赖的是package,而不关心是哪一个bundle export出来的。
这个区别,其实可以导致很大的用法差异。比如:
1. 在OSGI环境中有许多不同的版本的bundle的时候,required-bundle可以精确指定版本依赖,而import-package就不行了,它会根据class loader的顺序选择最先找到的class
2. 对于同一个package被许多不同的bundle同时export的时候,可以考虑使用import-package,它避免了对bundle的依赖
  • 大小: 28.2 KB
分享到:
评论

相关推荐

    osgi解决不同版本jar包冲突的demo

    3. **导入导出包**:在MANIFEST.MF中,声明bundle需要导入和导出的包。导入表示对其他bundle的依赖,导出表示向其他bundle提供服务。 4. **部署和启动bundle**:将创建的“myself”bundle复制到OSGi框架的“bundle...

    OSGi学习资料包教程.zip

    每个Bundle都包含一组相关的类和资源,有自己的类路径,并且可以通过导出和导入包来与其他Bundle通信。这使得开发者可以创建具有明确依赖关系的组件,避免了类路径冲突和版本管理难题。 OSGi服务是其核心特性之一,...

    OSGI中包含web服务器配置需要的jar.zip

    这通常涉及编写bundle的MANIFEST.MF文件来声明导出和导入的包,以及如何配置Web服务器适配器。 7. **动态性与灵活性**: OSGI的动态特性使得开发者可以在不中断服务的情况下更新和扩展Web应用,只需更新或安装新的...

    spring-osgi.jar及其依赖包

    1. **创建bundle项目**:使用如BndTools这样的工具,或者直接使用Maven或Gradle的OSGi插件,来设置bundle的MANIFEST.MF文件,定义bundle的导出和导入包。 2. **定义服务和组件**:使用DS或Spring的XML配置,声明...

    OSGi with CAR-Bundle

    Bundle的元数据由Bundle-Manifest描述,包括Bundle-Activator(激活器类)、Export-Package(导出的包,用于提供服务)和Import-Package(导入的包,依赖的服务)等。 对比于CAR(Component Archive),OSGi Bundle...

    很久之前的osgi整理

    Bundle通过声明导入和导出包来声明依赖关系。导入包表示Bundle需要使用的包,导出包表示Bundle提供的包。OSGi框架负责解析这些依赖关系,确保正确运行。 7. **动态性**: OSGi环境是动态的,允许在运行时安装新的...

    OSGI 开发文档中文的

    OSGI使用MANIFEST.MF文件来声明bundle的元数据,包括导入和导出的包。 3. **服务注册与发现**:OSGI中的服务模型允许组件通过服务注册表动态提供和查找服务,实现组件间的通信。理解服务接口和实现,以及如何使用...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    4. **依赖管理**:讨论如何在OSGi环境中管理依赖关系,包括导入导出包、解析依赖和处理版本冲突。 5. **服务导向架构**:介绍OSGi服务的概念,如何注册和查找服务,以及服务之间的交互。 6. **部署与打包**:讲解...

    OSGI进阶插件开发

    2. **依赖管理**:通过声明导入和导出包来管理依赖关系,确保bundle之间的正确协同工作。 3. **代码编写**:使用OSGi API编写bundle内的代码,实现服务注册和消费。 三、OSGi部署 1. **启动OSGi容器**:例如...

    OSGI学习文档

    包之间通过导出和导入包名进行交互。 2. **生命周期管理**:OSGI允许对包执行安装、启动、停止、更新和卸载等操作,这意味着在运行时可以动态地添加或删除功能,无需重启服务。 3. **服务导向**:OSGI强调服务的...

    osgi数据库连接demo

    在OSGi中,每个bundle都有自己的类空间,因此需要通过导出和导入包来管理依赖关系。例如,`org.springframework.jdbc-2.5.6.SEC03.jar`可能需要导入`c3p0`包以使用C3P0连接池,而`...

    基于Eclipse开发OSGI的简单实例

    2. **Service Bundle**:定义服务接口并导出,供其他Bundle导入使用。 3. **ServiceImpl Bundle**:导入服务接口,实现接口,并在MANIFEST.MF中配置依赖。 在OSGI开发中,每个Bundle的创建过程大体相同,包括定义...

    OSGI Core PDF+Code

    导出包意味着bundle提供了某些包的实现,而导入包则表示bundle需要使用其他bundle提供的功能。这种设计使得bundle之间可以有选择地依赖,降低了模块间的耦合度。 Equinox是Eclipse基金会开发的一个OSGI实现,它是...

    osgi学习笔记(一)

    当bundle被加载时,框架会解析其MANIFEST.MF文件,从中获取bundle的信息,如其导出和导入的包。 对于开发者来说,理解OSGi的生命周期是至关重要的。一个bundle可以处于以下状态:未安装、已安装、解析、启动、暂停...

    osgi文档及原理

    - 导入和导出包的规则 - 实现服务注册和服务消费的示例 - 安全策略和权限管理 - 模块的生命周期管理和调试技巧 - OSGi在实际项目中的应用场景和最佳实践 通过对这份文档的深入学习,开发者可以掌握OSGi的关键技术,...

    OSGI入门和例子

    1. **模块系统**:OSGI的核心是模块化,它定义了一种基于Java导出和导入包的机制,使得不同bundle之间可以安全地共享代码。每个bundle都有自己的类路径,确保了类的隔离性和封装性。 2. **生命周期管理**:OSGI ...

    亲历基本OSGI实例,进入另番思维领域(转)----包括打包发布为可执行文件

    1. **创建bundle**:将Java项目拆分成独立的bundle,每个bundle都有自己的MANIFEST.MF文件,声明导出和导入的包。 2. **配置构建工具**:使用Maven或Gradle等构建工具,配置OSGi插件,以便生成符合OSGi规范的jar...

    OSGI类资源动态加载介绍

    该文件中包含了Bundle的元数据,比如Bundle的名称、版本、需要的执行环境,以及该Bundle导入和导出的包等信息。 OSGi框架从概念上可以分为三个层次:模块层、生命周期层和服务层。模块层是OSGi框架中最基础的部分,...

    osgi-tutorial.zip

    每个bundle都包含自己的类路径,并可以通过导出和导入包来与其他bundle交互。这种模块化使得开发者可以独立更新和管理不同的功能组件,而不会影响到系统的其他部分。 Blueprint是OSGi服务模型的一种实现,它为OSGi...

    OSGI入门和整合Spring

    Bundles通过导出和导入包来共享代码,这类似于Java的import语句,但更加强大和灵活。OSGI框架负责管理这些依赖关系,确保bundle之间的正确加载和执行顺序。 Spring框架是Java企业级应用的常用框架,它简化了依赖...

Global site tag (gtag.js) - Google Analytics