zoukankan      html  css  js  c++  java
  • org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分

    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

     

  • 相关阅读:
    Task 4.5 求二维数组中的最大连通子数组之和
    Task 6.4 冲刺Two之站立会议4
    《程序员开发心理学》阅读笔记二
    第二次站立会议9
    第二次站立会议8
    第二次站立会议7
    第二次站立会议6
    第二次站立会议5
    第二次站立会议4
    第二次站立会议3
  • 原文地址:https://www.cnblogs.com/ku1274755259/p/11108496.html
Copyright © 2011-2022 走看看