Bundle可以被动态地安装、启动、停止和卸载。
Bundle是服务(Service)和组件(Component)的载体。
在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoader,正因为这样,各个Bundle内部的类是隔离的

Bundle之间的交互方式:
1.通过Package的Export(对外暴露自己的一个或多个package)和Import(导入别人的一个或多个package)来进行。
2.通过Service的方式进行。一个Bundle作为Service提供方,对外提供Servcie .使用者可以查找到提供的Service. 并使用这个ServÎce. 而提供/使用Service又存在两种方式:一种是经典的做法,通过BundlcContext ( Bundle 的上下文)来提供和获取.一种是使用Declarative Service来实现.

生命周期层
Bundle的生命周期被OSGi框架所管理,具有如下几个状态:INSTALLED 、RESOLVED 、UNINSTALLED 、STARTING 、ACTIVE、STOPPING

重要接口

生命周期层的API主要是由以下三个核心接口来组成的:BundleActivator,BundleContext 和 Bundle。
BundleActivator:让你能够捕捉bundle的start和stop事件,并对这两个事件作出自定义的反应。
BundleContext:一个bundle在框架中的执行时上下文,这个上下文提供了和框架进行交互的方法。
Bundle:在逻辑上表示了一个bundle,OSGi环境中的一个物理bundle对应了一个bundle对象。该对象中包含了bundle的基本信息和bundle生命周期的控制接口。

Bundle-SymbolicName --> 在osgi容器中的全局唯一标识符
当且仅当两个bundle的bundle-SymbolicName和bundle-version都一样,它们才是完全相同的
Export-Package:com.jar;filter="true" --> Import-Package:com.jar;filter="true"(或不写,可导入成功)
Export-Package:com.jar;filter="true";mandatory:="filter" --> Import-Package:com.jar;filter="true"(可导入成功)
mandatory默认为optional-->可选的

Import-Package:com.jar;resolution:="mandatory" -->必须的(默认),如果没有任何bundle导出com.jar-->报错

Import-Package:com.jar;resolution:="optional" -->可选的,如果没有任何bundle导出com.jar-->不报错

DynamicImport-Package:com.jar -->动态导入com.jar,真正使用到com.jar类时才导入package是否存在

Export-Package:com.jar;uses:="com.http.jar"  -->  com.jar使用了com.http.jar中的API

#导入整个bundle(不提倡)

a、
bundleA:
require-Bundle:bundleB
Export-Package:P

bundleB:
Export-package:p;partial=true;mandatory:partial

如果Bundle没有声明属性partial。它会从bundleA中导入Package p;

b、

bundleA:

require-Bundle:bundleB;visibilit:=reexport -->com.jar是否需要重新导出?默认(private:com.jar不会重新导出)
bundleB:
Export-package:com.jar

#spring-dm
http://docs.spring.io/osgi/docs/1.2.0-rc1/reference/html/
#在设计时要遵循的原则是不要静态化地依赖任何服务
##4大 Java OSGi 框架比较 (Knopflerfish, Apache Felix, Equinox, Spring DM)

osgi学习的更多相关文章

  1. 【Todo】OSGi学习

    经常听到.见到OSGi这个名字.那么就单开一篇文章记录一下对OSGi的学习吧. 主要是做一些概念上面的学习.暂时不打算深入实践. 主要参考:http://www.osgi.com.cn/article ...

  2. OSGI学习总结

    最近的一项研究了解了一下OSGI技术,感觉OSGI尽管有一定的学习难度.可是终于掌握和推广之后将是一项对系统开发比較实用的技术.在此和大家分享一下自己的感悟. 1.什么是OSGI OSGI直译为&qu ...

  3. OSGi学习-总结

    本文是osgi实战一书的前几章读书总结 1.  OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...

  4. OSGi 学习(二)

    上一篇说了很多虚的东西,现在说点别的. OSGi系统的独立环境下的项目结构以及启动脚本. 先说项目结构,基于equinox的OSGi容器的项目结构如下所示: bin中定义启动脚本,停止脚本之类的. c ...

  5. OSGi 学习(一)

    从基础开始,先来说说OSGi的基本理念. OSGi通过隔离底层classloader,强制应用在设计的时候就考虑模块化,并且基于白板模式来支持服务的注册与订阅. 在OSGi中,模块可以等价理解为bun ...

  6. OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性

    底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...

  7. Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门

    前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...

  8. OSGI.NET 学习笔记--架构篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...

  9. OSGI.NET 学习笔记--应用篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  OSGI.NET 与UIOSP OSGi是Open Service Ga ...

随机推荐

  1. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  2. java之google style

    Google的Java编码规范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html Google的Java编码规范 ...

  3. Java转json

    一.json介绍 1. 作用:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. 2.json以key-value的格式书写,数 ...

  4. Code First04---关于上下文DbContext

    这章主要讲怎么配置DbContext的子类访问的数据库的位置. 我相信大家最经常使用的数据库位置的配置方式就是配置文件了,也就是通过App.Config 或Web.Config来配置要访问的数据库. ...

  5. Java Annotation自定义注解详解

    在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...

  6. 使用json存储结构化数据

    从文件中读写字符串很容易.数值就要多费点儿周折,因为read ()方法只会返回字符串,应将其传入int()这样的函数,就可以将'123'这样的字符串转换为对应的数值 123.当你想要保存更为复杂的数据 ...

  7. 剑指Offer 变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   其实就是斐波那契数列问题. 假设f(n)是n个台阶跳的次数. f(1) = ...

  8. linux定时执行脚本

    阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. 编辑crontab文件 4. 流程举例 5. 几个例子 Linux中,周期执行的任务一般由cron这个守护进程来处理. ...

  9. django的中间件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2EAAAGUCAIAAAAzrr3rAAAgAElEQVR4nOy9d5wcx3kmzAXl80m6zy

  10. phpcms访问顶级栏目,自动跳到第一个子栏目

    在顶级栏目的category页放入如下代码: <?php if($child){ $child_arrary=explode(',',$arrchildid); $to_url=$CATEGOR ...