没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
23页
Spring OSGi规范 中文版 Spring框架是一个领先的full-stack Java/JEE应用框架。它提供一个轻量级的容器,依赖注入、aop、可插接的服务抽取,这些使得非侵入式的编程模型成为可能。OSGi提供了一个动态应用程序的执行环境,在这个环境中组件(bundles)可以在运行中被安装、更新、删除。它同时也可以很好地支持模块化及版本化。 Spring’OSGi的目标是使得写基于Spring的应用程序尽可能的容易,这些应用可以部署到OSGi的执行环境中,并可有效利用OSGi框架所提供的服务。通过在易用、强大的Spring框架上构建应用程序,Spring对OSGi的支持也使得开发这样的基于OSGi的应用更加简单、更加高效。
资源推荐
资源详情
资源评论
Spring OSGi 规范(v0.7)中文版
1.0简介
框架是一个领先的 应用框架。它提供一个轻量级的容器,依赖注入、
、可插接的服务抽取,这些使得非侵入式的编程模型成为可能。 提供了一个动态应用程序的
执行环境,在这个环境中组件()可以在运行中被安装、更新、删除。它同时也可以很好地
支持模块化及版本化。
的目标是使得写基于 的应用程序尽可能的容易,这些应用可以部署到
的执行环境中,并可有效利用 框架所提供的服务。通过在易用、强大的 框架上构建应用
程序, 对 的支持也使得开发这样的基于 的应用更加简单、更加高效。
更好的分离应用逻辑与模块;
同时部署一个模块的多个版本的能力;
动态查找、使用系统其它模块提供的服务的能力;
在运行时系统中动态部署、升级、卸载模块的能力;
使用 框架在模块之间实例化、配置,集成,装饰组件;
让企业应用开发者使用简单、熟悉的编程模型开发 平台的功能。
我们相信 与 的结合为构建企业应用提供了最全面的可用的模型。
的目标并不是提供一个通用的模型以支持任意的基于 的应用程序开发,但
是某些 的开发者肯定能够发现 模型吸引人之处,并采纳它。目前已经存在的 的
以及它们所 的任何服务都可以轻松的集成到使用 支撑的应用中,就象
是 已经存在的配置项。
定位于 及以上版本, !"# 及以上版本。
这个规范假设读者已经具有一定的 及 的知识。参见介绍白皮书“
$以及“$。注意:这些白皮书现在还不存在,还处于书写阶
段,吼吼吼。
2.0 Bundles and Application Contexts
中的开发单元(以及模块单元)是 。 中所说的 有三种稳定状态:
,,。% 可以导出()服务,其它的 可以查找并使
用这个服务。
在 中主要的模块化单元是一个 ,它包含很多个 (由
应用环境所管理的对象)。& 可以分级配置,这样一个子
可以看到定义在其上级的 ,但是反之则不行。 的 及 ' 的概念
用于导出引用给 外部的客户端的 ,以及注入引用到定义在一个
外部的服务。
的 与 的 有着本质的联系:一个激活的 可以
包含一个 的 ,负责在 中实例化、配置、组装以及装饰对象
()。其中一些 可以被导出()为 服务以供其它 使用,在
中的 也可以被轻松的注入 服务引用。
2.1在 Bundle 中创建 Application Context
一个 & 可以使用一个或多个定义了 的 *+, 配置文件来配置。(严格
地说,一个 对于配置的形式并不可知,但是 *+, 是最常用的形式)。包含配置
信息的 *+, 文档放置于 中的 +-&./0 文件夹。缺省情况下, 将使用在这个
文件夹中的所有以“"1$为扩展名的文档,作为 的配置定义。
缺省设置可以在 2 的 13 中重写。4 的值是由逗号分隔的资
源路径及指令列表。
2556(7)89
:5563(;3)8(;)8
每一个路径都被当作在 中定义的资源路径处理,例如:
25<"17<'"1
当带有 21 入口文件或者位于 +-&./0 文件夹中的资源的
被激活时, 将自动创建 。为了达到这一点,你必须首先安装
()并启动()在你的 运行时中的 "1=""
。
当一个 被首先创建后,它就判断所配置的 服务引用,看是否有任何
服务引用指定了 '(例如指定 !""! 或者 !"")。直到所有必须的服务都可用之后,这个
的初始化才结束。= 指令可以在 2 头中设置为 从
而改变这种行为。当 = 设置为 时,如果 在被激活
时其所必须的服务还不可用,创建 将失败。
清单头条目(-313'):
258;=56
表示所有在 +-&./0 中的 1 文件都应该被配置,并且如果 所必须的服务不
是立即可用, 的创建将会失败。
&3'5
25<"1;=56
表示使用 <"1 配置文件来配置 ,并且如果其
所必须的服务没有立即可用, 的创建将会失败。
& 作为 "1=""&2 的一个实例被
自动发布为一个 服务。此外,"1="""1 用于设置驻留了
的 的标识名称。通过在 21' 中指定
“356$可以禁止发布 为一个服务。
注意: 被发布为一个服务使得测试和管理变得容易。获取一个指向在其它
中定义的 的首选方式是使用>5:9和F>5:元素
(相对于在 服务中调用 %()方法)。原因就在于通过使用
>5:9和F>5:组成服务, 的基础架构将保证一个 只能看到类的
版本与之相兼容的服务,反之如果在注册表中查找一个 ,然后调用
%(?)返回一个对象,然后类兼容性的唯一保证就是 &2 类自身是兼容的。
很明显在一个存在同时部署了多个版本的 的系统中,这种保证是不够健壮的。
2.2 Spring 资源抽取
在 中使用 , 加载资源。相关资源路径由
以一种与 类型相符的方式(例如基于 的
3,或基于 的 =)解释。对 应用来说,相关资源路径作为从
3 中加载的资源解释。如果资源路径以“5$前缀开头,那么只以给定的资源搜索
自己及其附加的 1。
2.3 BundleContextAware
鼓励基于不依赖于任何环境的简单对象开发应用。但是,如果一个 由于某种
原因的确需要访问它的 %2,那么这个 可以实现
"1="""%2&= 接口。实现这个接口的 % 当在
中实例化时将会被注入 %2。
2.4使用 Context ClassLoader
目前存在很多很有用的第三方包及应用,它们对 一无所知,并且依靠线程环境
2, 动态加载类。 没有定义 类加载器在任何时间点将是什么(
<=332,='1")。这个现实与
的非分级的类加载机制相符,意味着这些包将不能找到它们所需要的类和资源。
举一个简单的例子,一个应用被打包到 & 中,使用 4 所导出的 4 的类
创建了一个 40'。这个 0' 将会需要加载定义在 & 中的
应用的类及资源,但是对于它来说,在 环境中,& 是不可见的。为解决这个问题,
22, 对于任何从 & 发起调用到 4 的线程来说必须被设置为 & 的
2,。
保证了当激活一个 时,2, 总是被设置为能够访问被激
活的 的资源。这样在 实例化及配置阶段发起的对包的调用总是产生于一个合适的
2, 的上下文环境中。
请求 管理 2, 调用 服务也是可能的,以及对作为 服务而
暴露的 的调用。想了解更多的细节请参考第三部分。
2.4.1Other contexual access
能够实现 %2&= 接口以方便被注入它所在的 的
%2 引用。在 被激活以及其它调用某个被当作 访问的 服务时,
也会通过一个 -3, 变量来提供对“当前” 的 %2 的访问,这个变
量可通过 ,%2"2 获取。
2.5 Web 应用支持
使用
2,,"1="=""2,, 来自动
的为 = 应用创建 @&2。 可用的
@&2,"1=""""@&2
版本提供用来在 中运行 = 应用。要使用这种支持,需要在你的 ="1 文件中设置监听
器声明的 2 参数为
“"1=""""@&2$。
3.0 OSGi 平台服务和动态本质
是一个动态的平台: 可能在框架运行期的任意时刻被安装、启动、更新、停止以及
卸载。在本章我们将从 及其发布和访问的服务的角度来揭示这意味着什么。
当一个激活的 停止时,在它的生命周期中它所导出的任何服务也将被自动反注册,并且
返回到 状态。停止的 会释放所有它所获取的资源,终止所有的线程。停止
的 所导出的 A 仍然对其它 可用。
处于 状态的 可以被卸载:被卸载的 所导出的 也仍然对其它
导入它们的 可用(除了新安装的 )。
处于 状态的 也可以被更新。更新使得 从一个版本迁移到另一个版本。
最后,处于 状态的 可以被启动,使它的状态转移到 状态。
A&13A 操作刷新所有 框架的包或者是已安装的
的给定的子集。在刷新期间,受其影响的 中的 将会被停止并
重新启动。3A 操作完成后,被更新的 的原有版本导出的包不再可用。完整的
细节内容请参考 规范。
3.1启动停止定义了 application context 的 bundle
当包含 资源的 被激活时,这个 的 会自动创建(参
见 B"! 节)。随后,当这个 被停止时, 会被关闭然后销毁。在
中任何实现了 % 接口的单例 或在配置中指定了 '13 的 将会
收到通知。当 停止后,所有被 导出的 服务会被反注册。
3.2 OSGi 服务
服务是一个在 服务注册表中发布的对象,提供公开的接口。服务也可以发布成为一组
可查询的属性。
服务本质上是动态的因此使用服务的应用需要有这方面的处理机制。 提供几种不同的
机制来处理动态服务,包括声明性服务()规范。
使用 时,服务组件的所有依赖都满足后被激活,服务组件也可以用一些简单的属性值(简单类
型,字符串值以及这些类型的数组或 )和引用已发布的 服务进行配置。组件自身也可能
以一个由它自己所指定的接口实现作为 服务注册。
服务组件类似于 ,因为它们由简单 对象返回并且可以进行依赖注入。然而,
与 相比,这种依赖注入是非常有限的,没有任何在 中的 可以使用的更高级功能
的支持,例如 &A,声明性事务,安全,管理,导出导入其它的非 服务等等。而且如果不以完
全的 服务的形式导出任何注入的服务引用,也不可能将这组服务组件与某个 进行组装
(.131=3
=3'C
")。 允许在一个 中对 进行完全的配置与组装,而且不需要仅仅为了在
相同 中的另外一个 的需要就将 导出到 之外。这样在导出
() 与私有() 之间就有了明显的区别。
(相当合理地)要求服务以 服务组件形式打包,并使用 的语法进行配置。当使用
的 时,对用户来说这是一个潜在的混淆,因为在 的概念、语法与 之
间存在重叠。
能够管理在 中声明的服务之间的依赖关系,并且支持
与 相同的延迟激活语义。 也完全支持动态的发布、访问服务。 使得
能够与使用 的 和谐共存,但是对于新的 的开发来说,我们推荐使用
来代替 。
目的是提供一种简单、一致的编程模型,无论是在 环境之内还是之外。这方便了在
之外的测试工作,使得不熟悉 的复杂编程模型的企业 应用的开发者更容易、更高效
地进行测试。同时,如果一些高级功能的确需要直接与 协同工作,这也是支持的。
3.3使用 OSGi 服务
>5:元素用于定义一个本地的 代理某一个(或一组) 服务。唯一需要
的属性是 (定义本地 的名字)和 (定义目标服务所注册的接口的全质类名)。
例如,定义一个本地 代表 + 服务:
剩余22页未读,继续阅读
资源评论
- xiaoyaodianxiangan2014-10-13学习看看还可以
- lbam0012012-07-17这玩意太老了
qawse
- 粉丝: 3
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 批量将py编译为pyd文件.atbx
- Python项目-学生管理系统
- verilog HDL硬件语法设计包括算术运算三人表决器Verilog的阻塞和非阻塞赋值源码例程quartus13.1工程合集
- 【文章话题分类论文】OpenAlex Topic Classification Whitepaper
- linux学习常用命令
- 功率拓扑快速参考指南-ti,TI官方出品
- 开关电源拓朴图表,各种电路拓扑表格
- 登录和注册 前端:vue3+iview plus +axios 后台:spring boot +mybatis
- 软件测试入门简介:从基础到实践的全面介绍
- 2024CDA Level Ⅰ 认证考试大纲
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功