武汉的开发者们注意啦!AI技术战略、框架以及最佳实战尽在Azure OpenAI Day 了解详情
写点什么

Spring - OSGi 集成项目 Milestone 1 发布

  • 2007-04-21
  • 本文字数:1163 字

    阅读完需:约 4 分钟

Spring - OSGi 项目的第一个里程碑版本近期刚刚发布,该项目提供了将 Spring 应用部署到 OSGi 环境的支持。由于 OSGi 的重点在于模块的动态化管理,这给 Spring 的集成团队带来了很多特殊的挑战。

采用 OSGi 的最大挑战之一就是处理其动态本质。在应用程序中,服务(以简单对象实例形式存在)加进来移出去,而你的应用必须对其进行处理。解决方法并不是很直截了当的,需要根据不同的实际情况而采用不同的处理方式,并且如同异常处理和事务处理一样,需要应用级别的全局作用域。在模块化的过程中,类装载方式的限制会显得更加突出,而这种限制与 AOP 的合并则会带来更大的麻烦:开发人员不得不另觅蹊径,但这样一来,就会把 OSGi 带来的好处扔的一干二净。这只是我们在 Spring-OSGi 里面正在处理的事情中的很少一部分而已,在最终版本中,肯定会与 OSGi 平滑相接。

这个发布版的部分核心特性包括:

OSGi 应用上下文(OSGi Application Context)
尽管 OSGi 采用的是基于 bundle——也就是独立模块——的架构,但 Spring-OSGi 增加了应用级别的上下文,这样开发人员就可以通过它对存放整个应用的 OSGi 上下文进行访问。

对资源的抽象(Resource Abstraction)
OSGi 向 classpath 中加入了一个抽象层,在该层中有一个 URL scheme,它会根据实现的不同而变化。Spring-OSGi 对这个 scheme 进行了封装,并提供了一个很轻便的查询接口。

动态服务支持(Dynamic Service Support)
通过 XML 配置,把任何对象转换成 OSGi 服务都是轻而易举的事情。

集成测试(Integration Testing)
Spring-OSGi 在 JUnit 的基础上,添加了一个用于测试的微架构,这样一来,从 IDE 中运行需要在容器中执行的测试就会更加简单了。

Hal Hilderbrand 指出,对 JUnit 的支持尤其引人注目

从根本上说,任何有关容器内测试(In-container Testing)的问题都可以归结于如何将测试在容器内运行起来。我们首先必须要配置并启动容器,当然,需要部署测试代码(在 OSGi 容器中,则需要部署测试场景所需的 bundle),然后就剩下 JUnit 测试了。接下来我们必须要从容器外触发测试的运行,并通过某些方式得到测试的运行结果。Costin 的框架很漂亮的解决了这一点,它在同一个进程中配置并启动 OSGi 容器,同时把所有的 JUnit 测试类包装到一个自动生成的 OSGi bundle 中。其结果就是,现在的容器内测试可以完全和任何 JUnit 测试一样运行 - 用 Ant 或者 Maven,或任何一款你所偏爱的 IDE。正如我所说过的一样,这项功能非常酷,你应该亲身体验一下来确信这一点。甚至没有任何容器曾经向它靠拢过。

您可以通过此链接查看英文原文

译者简介:李剑中国Eclipse 社区插件开发版版主,在JavaEye 拥有 RCP 专栏, 北航软件工程硕士。现就职于 Ethos ,热衷于设计模式,敏捷软件开发的研究与实践。为 InfoQ 中文站贡献内容,请邮件至 china-editorial@infoq.com

2007-04-21 20:001051
用户头像

发布了 197 篇内容, 共 52.2 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

流行的机器学习算法——线性回归

小齐写代码

C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

Mac操作系统的专业音频处理软件:Hit'n'Mix RipX DAW PRO

Rose

音频处理器 苹果破解软件下载 Mac音频处理 Hit'n'Mix RipX DAW PRO

炫酷鼠标悬停随机渐变文本动画效果

南城FE

CSS 前端 css动画

macOS 上最完整、最通用、最强大的菜单栏日历:Calendar 366 II

Rose

Mac日历软件 苹果破解软件下载 Calendar 366 II中文版 Calendar 366 II Mac下载 菜单栏日历工具

思维导图、头脑风暴:MindNode for mac完整中文破解版

Rose

mac思维导图软件 MindNode 5 MindNode破解版下载 MindNode for mac

Adobe Audition(Au)如何扫描 VST3、VST 和 Audio Units 增效工具?

Rose

文心一言 VS 讯飞星火 VS chatgpt (170)-- 算法导论13.2 3题

福大大架构师每日一题

福大大架构师每日一题

旧年好,祝新年更好

阿里云视频云

云计算 视频云

保护你的游戏服务器——游戏盾的功能和优势

德迅云安全_初启

什么是数据驱动?它和模型驱动、领域驱动、元数据驱动、DSL驱动之间有什么区别?

canonical

领域驱动设计 低代码 领域驱动 Nop平台

笔记:写Flink SQL Helper时学到的一些姿势

泊浮目

vscode ANTLR antlr4 FlinkSQL

AI数字人直播间搭建教程!

青否数字人

数字人

DAPP矩阵公排模式系统开发

l8l259l3365

终于!极狐GitLab 支持 ARM 啦!

极狐GitLab

跨界宠粉!五粮液包机送“五粉”直击湖南跨年晚会!

新消费日报

ExecutorCompletionService详解

Java随想录

Java 线程 线程池 并发

Merlin Protocol 推出 BRC20 Indexer Oracle 基础设施

中本聪研究院

区块链

RocksDB深度解析

俞凡

架构

CodeWhisperer: 让开发效率翻倍的AI助手

不会算法。

Rectangle Pro for Mac(原Hookshot光标快速移动和管理窗口的工具)

Rose

Rectangle Pro for Mac mac窗口管理工具 Hookshot光标

Casper Network 推出 “DevRewards” 计划:允许所有开发者赚取激励

股市老人

INFINI Labs 产品更新 | Console 数据迁移支持 Percentiles 均匀分区

极限实验室

console 极限科技 产品更新发布

ThreadLocal底层源码解析

快乐非自愿限量之名

Thread 底层源码

揭密支付安全:为什么你的交易无法被篡改

隐墨星辰

支付系统 签名验签 支付安全 支付系统设计与实现

IINA for Mac:功能强大的开源媒体播放器

Rose

mac视频播放器 IINA下载 好用的苹果媒体播放器 IINA for Mac下载

简单清晰的Redis C++客户端

王玉川

c++ redis 开源 发布订阅 流水线

Casper Network 推出 “DevRewards” 计划:允许所有开发者赚取激励

EOSdreamer111

2023 总结:我在上海做程序员的第八年

拭心

android 程序员 年度总结

神经元科技发布AI Agents—“萨蔓莎”

科技热闻

Spring - OSGi集成项目Milestone 1发布_Java_James Kao_InfoQ精选文章