1. 我与osgi

接触osgi有3年多的时间,从陌生到熟悉,从使用到原理。对于osgi的思考也一直在持续着。隔离性、热更新、serviceTracker...

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  1. Java模块化的发展

osgi是Java动态模块化的实际标准,对Java的发展起到了推动性的作用,但osgi却不被官方认可。直到Java9中Java原生的模块化才正式上线,对jdk进行了模块化的重构,引入了platformClassloader。但jagsaw相对于OSGI,无论是功能上,还是成熟度上都是jagsaw难以比拟的。

我常常思考动态模块化对于Java来说到底带来了什么?

量化边界【模块间的耦合性】,代码间不能在随意的耦合。

  1. bundle

bundle是OSGI组成单元,每一个bundle都有独立的生命周期,系统bundle负责bundle的管理。bundle有了生命周期是一个多么激动的事情!

这个样就可以自由的安装、卸载功能了。

  1. 昙花一现的springDM

spring很早就开始支持osgi,发布了springDM模块,springDM允许进程内创建多个spring-context。spring的加入并没有的降低osgi框架的使用难度,bundle启动顺序乱序,启动时间长等。渐渐地spring退出了springDM的维护,并将springDM捐给了eclipse社区。

  1. 隔离性的思考

隔离性体现在两个方面:类的隔离性行,服务的隔离性。前者通过类加载器实现,后者通过多spring-context来实现。无论是哪一种隔离性,都把资源的访问变得可以控制。bundle之间的类和实例的引入都需要显示的声明,而传统的方式,同一个文件夹下的jar包里面的类是可以任意访问的,任意访问意味着不可控,意味着jar之间的耦合关系难以量化。说到这里你也许会说,maven之间的依赖不是可以描述依赖关系吗?但是我想说:maven确实可以描述的依赖关系,但是这种关系太粗了,要想了解类一级的依赖关系还需要去看源码。而osgi确可以通过配置文件把这个依赖【或者说耦合】量化。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄