一、类加载架构分为3类:
1、父类加载器:java平台提供,如启动类加载器BootstrapClassLoader、扩展类加载器Extension ClassLoader和应用程序类加载器Application ClassLoader;
2、Bundle类加载器:每个bundle都有自己的类加载器,加载本bundle中工单类和资源。请求另一个bundle导出的package中的类时,由导出package的bundle负责加载。
3、其他加载器
二、父类加载器:
osgi框架可通过设置org.osgi.framework.bootdelegation指定一些pakcage委派给父类加载器加载。
三、bundle类加载器:
bundle-classpath描述了bundle加载器应去何处查找类。默认值为".",如果bundle存在其他jar文件,加载器只能把它当做普通文件处理。通过使用bundle-classpath可解决。
一般可理解为Import-Package和Require-Bundle的优先级高于Bundle-Classpath,可在前者查找到的类,后者就不起作用。
对于Bundle中发生的加载,当前Bundle的Bundle类加载器是使用到的类的初始类加载器(触发加载某个类),而哪个类是定义类加载器(真正加载某个类)则要根据osgi类加载顺序判定。
由不同定义类加载器加载形成的类在java虚拟机中是完全独立不可互相转型的
OSGI之类加载架构
最新推荐文章于 2021-02-13 10:37:30 发布