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函数的主流程为:

其中在上面第四步调用Framework的init方法,初始化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。

安装好后会显示bundle的ID号

然后使用start命令启动bundle:

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

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

注销该bundle:

然后卸载掉该bundle

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

时间: 2024-08-28 15:01:50

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

【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源热更新 Android热更新开源项目Tinker源码解析系类之三:so热更新 转载请标明本文来源:http://www.cnblogs

ClearCanvas源码解析2:读取dcm文件

一.基础知识: 1.数据集和元素结构 一个数据集由多个数据元素组成 数据元素可以嵌套为多级(分组) 一个数据元素分:标记.值类型.长度.和值四部分. 传输语法为隐式VR的,没有值类型. 一个标记分:组和组元素,如(0010,0010) 显示VR数据结构:  tag  vr  value length  value filed  标记  值类型  长度  值 隐式VR数据结构:  tag  value length  value filed  标记  长度  值 数据意义:0002组存储通讯描述:

org.apache.felix.framework-5.6.12源码解析——*framework中dto,hook,launch,namespace,startlevel部分

DTO 在Felix中使用了DTO模式,在传统的编程中,我们一般都是前台请求数据,发送到Webservice,然后WebService向数据库发出请求,获取数据,然后一层层返回:模型如下: 这种比较原始的请求方式带来的缺点有很多,多次请求耗费一定的网络资源,减慢效率.如果一次性返回整个实体类,还可能造成数据库表结构的泄漏. DTO模型: 这样带来的好处有: 1.依据现有的类代码,即可方便的构造出DTO对象,而无需重新进行分析. 2.减少请求次数,大大提高效率. 3.按需组织DTO对象,避免传输整

Lucene4.2源码解析之fdt和fdx文件的读写——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压

前言 通常在搜索打分完毕后,IndexSearcher会返回一个docID序列,但是仅仅有docID我们是无法看到存储在索引中的document,这时候就需要通过docID来得到完整Document信息,这个过程就需要对fdx/fdt文件进行读操作.为了更清楚地了解fdx/fdt文件的作用,本文把fdx/fdt文件的读和写整合到了一起,尽管这在Lucene中是两个分开的过程. 1. 索引生成阶段 索引生成阶段包含着一个复杂的过程,所以了解本文前最好对Lucene的索引架构有一定的了解,可以参考博

【Spring源码分析】.properties文件读取及占位符${...}替换源码解析

前言 我们在开发中常遇到一种场景,Bean里面有一些参数是比较固定的,这种时候通常会采用配置的方式,将这些参数配置在.properties文件中,然后在Bean实例化的时候通过Spring将这些.properties文件中配置的参数使用占位符"${}"替换的方式读入并设置到Bean的相应参数中. 这种做法最典型的就是JDBC的配置,本文就来研究一下.properties文件读取及占位符"${}"替换的源码,首先从代码入手,定义一个DataSource,模拟一下JDB

Android setContentView()源码解析

前言 在Activity中一般第一句就是调用setContentView(R.layout.XXX),但这其中系统做了那些工作? 我们知道,在ClassLoader装载了MainActivity之后,首先创建了Application,之后依次调用Application对象的onAttach和onCreate()方法.然后顺序调用第一个Activity的onAttach和onCreate()方法.大概有个印象即可,后文会涉及到.具体参考:Launcher启动应用程序流程源码解析. 新建测试工程Te

Android LayoutInflater.from().inflate()源码解析

我们知道,在Activity#setContentView()中会调用PhoneWindow#setContentView().而在PhoneWindow#setContentView()中有这么一句mLayoutInflater.inflate(layoutResID, mContentParent).这行代码的作用是将我们的activity_main.xml填充到mContentParent中去.详见:setContentView源码解析.在写adapter的时候,也经常写mInflater

MIT 2012分布式课程基础源码解析一-源码概述

课程主页 课程介绍:本课程会在给出的源码的基础上要求完成8个lab lab overviewLab 1 - Lock ServerLab 2 - Basic File ServerLab 3 - MKDIR, UNLINK, and LockingLab 4 - Caching Lock ServerLab 5 - Caching Extent Server + ConsistencyLab 6 - PaxosLab 7 - Replicated lock serverLab 8 - Proje

【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 Android热更新开源项目Tinker源码解析系类之三:so文件热更新 转载请标明本文来源:http://www.cnblogs.com/yyangblog/p/6252855.html更多内容欢迎star作者的github:https://github.com/LaurenceYang/artic