码迷,mamicode.com
首页 > 其他好文 > 详细

OSGI各个容器之间的类加载器是怎么进行隔离的

时间:2019-10-14 01:08:55      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:包括   类加载   它的   其他   ack   parent   扩展   父类   启用   

OSGI各个容器之间的类加载器是怎么进行隔离的

什么是osgi:

OSGi为java平台提供了动态模块化的特性

 

osgi特点:

没有对Java的底层实现如类库和Java虚拟机等进行修改,OSGi实现的模块间引用与隔离、模块的动态启用与停用的关键在于它扩展的类加载架构。

OSGi的类加载架构并未遵循Java所推荐的双亲委派模型(Parents Delegation Model),它的类加载器通过严谨定义的规则从Bundle的一个子集中加载类。

每一个被正确解析的Bundle都有一个独立的类加载器支持,这Bundle类加载器:每个Bundle都有自己独立的类加载器,用于加载本Bundle中的类和资源。当一个Bundle去请求加载另一个Bundle导出的Package中的类时,要把加载请求委派给导出类的那个Bundle的加载器处理,而无法自己去加载其他Bundle的类。些类加载器之间互相协作形成了一个类加载的代理网络架构,因此OSGi中采用的是网状的类加载架构,而不是Java传统的树状类加载架构。

 

osgi中的类加载器:

父类加载器:由Java平台直接提供,最典型的场景包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader),它们用于加载以“java.*”开头的类以及在父类委派清单中声明为要委派给父类加载器加载的类。

Bundle类加载器:每个Bundle都有自己独立的类加载器,用于加载本Bundle中的类和资源。当一个Bundle去请求加载另一个Bundle导出的Package中的类时,要把加载请求委派给导出类的那个Bundle的加载器处理,而无法自己去加载其他Bundle的类。

其他加载器:譬如线程上下文类加载器、框架类加载器等。例如框架类加载器,OSGi框架实现一般会将这个独立的框架类加载器用于加载框架实现的类和关键的服务接口类。它们并非OSGi规范中专门定义的,但是为了实现方便,在许多OSGi框架中都会使用。

 

OSGI各个容器之间的类加载器是怎么进行隔离的

标签:包括   类加载   它的   其他   ack   parent   扩展   父类   启用   

原文地址:https://www.cnblogs.com/jetqiu/p/11669084.html

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