1、OSGI
为了实现代码热替换,模块化和动态化,就像鼠标一样即插即用,双亲委派这种树状的加载器就难以胜任,于是出现了 OSGI 加载模型,OSGI 里每个程序模块(Bundle,就是普通的 jar 包, 只是加入了特殊的头信息,是最小的部署模块)都会有自己的类加载器,当需要更换程序时,就连同 Bundle 和类加载器一起替换,是一种网状的加载模型,Bundle 间互相委托加载,并不是层次化的。
Java 类加载机制的隔离是通过不同类加载器加载指定目录来实现的,类加载的共享机制是通过双亲委派模型来实现,而 OSGI 实现隔离靠的是每个 Bundle 都自带一个独立的类加载器 ClassLoader。
2、helloworld
1、eclipse 下 new 一个 plug-in project
2、选择 an OSGI framework : Equinox
3、第一次新建,勾选一下jre 比如你用的jdk 1.6 ,点开之后选择 environment JavaSE 1.6,然后勾选你的jdk路径
4、然后可以使用Hello OSGI 模版
5、然后run as 里面配置一下 run configration,选择以下几项:
- 项目本身 bundle
- org.eclipse.equinox.console
- org.apache.felix.gogo.* (这里有三项,command,shell,runtime)
6、最后apply,run
7、然后可以使用osgi> 控制台 命令 ss 查看bundles 启动情况