博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OSGI 注记(一)
阅读量:5042 次
发布时间:2019-06-12

本文共 1069 字,大约阅读时间需要 3 分钟。

    2012年参与的几个WEB项目都基于OSGI框架,本系列注记试图将个人对OSGI标准及其相关技术做一个笔记。

OSGI:    

     OSGI的目的在于针对大型的JAVA项目提供模块化支持,这里的模块称为bundlebundle之所以能够实现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项目中最典型的应用是菜单栏,在后续的文章中再详述了。

转载于:https://www.cnblogs.com/Fredric-2013/archive/2013/01/30/2882709.html

你可能感兴趣的文章
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
UIActionSheet 修改字体颜色
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
Spring注解之@Lazy注解,源码分析和总结
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>