Part4. OSGi的类加载架构
来源:互联网 发布:程序员和ui设计师爆笑 编辑:程序博客网 时间:2024/05/11 06:05
OSGi的类加载架构并未遵循Java所推荐的双亲委派模型,他的类加载器通过严谨定义的规则从Bundle的一个子集中加载类。除了Fragment Bundle外,每一个被正确解析的Bundle都有一个独立的类加载器支持,这些类加载器之间相互协作形成了一个类加载的代理网络架构,因此OSGi采用的是网状的类加载架构,而不是Java传统的树状类加载架构。
在OSGi中,类加载器可以划分为3类。
一、父类加载器:有Java平台直接提供,最典型的场景包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)、和应用程序类加载器(Application ClassLoader)。他们用于加载以 “java.*” 开头的类以及在父类委派清单中声明为要委派给父类加载器加载的类。
二、Bundle类加载器:每个bundle都有自己独立的类加载器,用于加载本bundle中的类和资源。当一个bundle去请求加载另一个bundle导出的package中的类时,要把加载请求委派给导出类的那个bundle的加载器处理,而无法自己去加载其他bundle的类。
Bundle-Classpath这个元数据标记与Bundle类加载器密切相关,它描述了Bundle加载器的Classpath范围,即bundle加载器应该在哪里去查找类。
Bundle-Classpath标记有默认值“ . ”,它代表该bundle的跟目录,或者说代表该bundle的JAR文件。如果不在元数据信息中显示定义这个标记,那么bundle类加载器就在整个bundle的范围内查找类。但是要注意,在这种默认配置下,如果bundle存在其他JAR文件,类加载器只能把它当做一个普通的资源来读取,而无法查找这些JAR文件内部包含的类。
Bundle类加载器收到类加载请求时,会优先委托给导入包的其他bundle类加载器处理,只有其他导入包的bundle类加载器都无法处理时才会尝试自己处理。(通俗的理解为“Import-Package” 和 “Require-Bundle” 的优先级高于 “Bundle-Classpath”)
三、其他加载器:譬如线程上下文类加载器、框架类加载器等。他们并非OSGi规范中专门定义的,但是为了实现方便,在许多OSGi框架中都会使用。
类加载顺序:
- Part4. OSGi的类加载架构
- OSGI的类加载机制
- 【OSGi】OSGi类加载流程
- 【OSGi】OSGi类加载流程
- 【JVM】OSGi 灵活的类加载结构
- OSGi类加载流程
- OSGi的Class Loading架构
- OSGi服务:SOA的架构
- OSGi与类加载器
- OSGI学习系列(四)类的加载
- OSGi服务:非常适合SOA的架构
- OSGi服务:非常适合SOA的架构
- OSGi服务:非常适合SOA的架构
- osgi加载模式引发的错误
- 《程序员必读软件架构 Part4 可视化软件》(二)软件架构中用到的图
- equinox实现osgi类加载机制
- tomcat与OSGI:类加载器
- OSGi框架与类加载器
- java内存调优常用命令
- 关于Oracle Linux,它做了什么
- hdu 5423 Rikka with Tree 乱搞
- Source Insight 3.5 宏的用法
- C++ 类的静态成员详细讲解
- Part4. OSGi的类加载架构
- 如何设置mysql在局域网中访问
- 如何更改Windows系统登陆界面
- 求10000以内所有质数的和
- shell脚本那点事儿6
- java解析xml文件的四种方式
- Android 保存图片到SQLite,读出SQLite中的图片
- 在计算机上使用VNC Client远程控制树莓派
- jquery的checkbox操作