OSGI 注记(一)
2012年参与的几个WEB项目都基于OSGI框架,本系列注记试图将个人对OSGI标准及其相关技术做一个笔记。
OSGI:
OSGI的目的在于针对大型的JAVA项目提供模块化支持,这里的模块称为bundle。bundle之所以能够实现JAVA的模块化,原理在于OSGI框架对每个bundle提供了独立的classloader,而在JVM中任何一个类是通过classloader +packet name + class name 唯一标识,因此每个bundle中的类就被隔离了。bundle和bundle之间的交互,由OSGI框架根据bundle自己的XML配置(相当于是lib/DLL中的头文件定义),调用对方的classloader实现。通常用到的OSGI框架是equinox和springDM,其中springDM严格上讲不能算是一个OSGI框架,它只是在equinox的基础上提供了spring的封装。
扩展点:
谈到OSGI还有一个经常要配合用到的技术是扩展点,扩展点最早在eclipse中被应用并流行的,我个人是这样理解的:
扩展点本身仍然是一个接口,与通常我们提到接口的差别在于,普通意义上的接口在于提供一个能力供其他模块调用,例如模块A提供接口int calc_result(unsigned int input),那么模块B在调用这个接口时相当于利用了A提供的能力calc_result。
而扩展点的意义在于提供一个接口用以扩展自己的能力,这个设计并不新鲜,我认为最典型的例子是shell(有的也叫MML模块)。shell模块处理终端给出的命令并给出相应的处理,但shell本身不会提供全部的命令处理实现,因此通常我们会这样实现,shell模块内部定义一个结构体数组,数组的每个元素包括一个命令字符串和一个函数指针,通过遍历数组匹配命令行后调用相应的函数。同时提供一个注册接口,例如int register_func(char* command, void (func*)(void))。业务模块A可以调用register_ func 将自己的一个功能注册进shell,这样一来shell模块就拥有了模块A的某个命令处理的能力,模块的功能被扩展了,register_func就可以认为是一个扩展点。
扩展点在JAVA WEB项目中最典型的应用是菜单栏,在后续的文章中再详述了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)