码迷,mamicode.com
首页 > Web开发 > 详细

org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分

时间:2019-06-30 09:51:37      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:注册   查看   创建   声明   服务   可见   导入   start   优先   

org.apache.felix.framework-5.6.12源码解析

org.apache.felix.framework文件夹最后的部分

OSGi规范可见OSGi类加载流程图为:

技术图片

类加载的优先级顺序基本按照如下的原则:父容器classloader(通常是app classloader) –> 其他bundle的classloader –> 当前bundle的classloader –> 动态导入的包所在bundle的classloader。这个原则既可以使相同的类(包名也相同)尽可能只被加载一次,减少虚拟机perm区大小,也正因为如此,不同bundle中的相同的类,委托给同一个classloader加载,才能做到他们的对象和引用可以相互转换。(要知道一个类如果由不同的classloader加载后,其中一个classloader加载的类的对象是不能赋值给另一个classloader加载的类的引用的。

felix的osgi类加载顺序实现代码

org.apache.felix.framework.BundleWiringImpl.java类findClassOrResourceByDelegation(String name, Boolean isClass)方法中:

技术图片

org.apache.felix.main文件夹全部

其中main函数的主流程为:

技术图片

其中在上面第四步调用Frameworkinit方法,初始化Framework实例的具体流程为:

技术图片

Felix使用举例(写在最后)

启动

技术图片

Felix 框架交互的主要方式是使用上面的Apache Felix Gogo Shell

可以使用 felix:lb 查看当前系统安装的所有 bundle 信息,执行效果如下:

技术图片

我们可以自己安装和卸载一个Bundle,下面展示怎么安装一个Bundle:

安装主要分为两个步骤,第一是安装、第二是运行

下面展示创建一个简单的 bundle,并配置 MANIFEST.MF 文件,然后编译、安装、运行我们打包好的 bundle

bundle的实现代码如下:

技术图片

然后编写manifest.mf文件,这个文件的作用是声明bundle的一些列元信息,包括此bundle的名称,版本,创建者,启动入口,依赖的包,对外暴露的包。

该文件编写如下:

技术图片

然后编译该类,编译好后,将编译好的类和manifest.mf一起打包为一个jar包,然后在felix框架下安装此bundle

技术图片

安装好后会显示bundleID号

然后使用start命令启动bundle

技术图片

此时会执行代码相应部分,输出信息。

当上面的 bundle 被安装启动之后,框架中所有的服务注册、注销、更改事件都会被此 bundle 检测到,并且会打印出相应的事件信息

注销该bundle

技术图片

然后卸载掉该bundle

 技术图片

 

org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分

标签:注册   查看   创建   声明   服务   可见   导入   start   优先   

原文地址:https://www.cnblogs.com/ku1274755259/p/11108496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!