JVM类加载器可见性/解决方案问题查找自定义类

时间:2017-10-04 13:45:04

标签: annotations jvm osgi classloader resolution

我尝试重新提出这个问题,因为可能之前的问题并没有太多意义。 背景: 由kxf osgi中的cxf webservice getPort()抛出的sun.reflect.annotation.TypeNotPresentExceptionProxy,因为在自定义类加载器(而不是应用程序类加载器)加载的Web方法的注释中有一个类。 我真的不想在这里找到解决方案,因为它可能只是一个cxf错误,我只是想了解这是怎么发生的。所以我的问题很简单: 是否可以配置从CLASSPATH加载类的应用程序类加载器来代替联系我的自定义类加载器?如果我将缺少的类放在lib文件夹中,那么api调用会找到它,但这不是我想要的,我希望它使用bundle类加载器。

1 个答案:

答案 0 :(得分:0)

在OSGi中,每个包的类加载器包含该包的类。它还可以解析所有已声明的Import-Package包中的类。它通过委托提供导出的相应包的类加载器以及在解析期间选择作为该包的提供者来解析这些类。

因此在OSGi中通常只有一个类加载器加载相同的类。包含该类的包的类加载器。所有其他类加载器如果具有正确的导入,则委托给它。

由于CXF始终也会查询捆绑包的类加载器,因此您可能会尝试确保导入未找到的类的包。

在OSGi中,由于每个包在其代码执行之前已被解析(如果您没有使用可选导入或动态导入等内容),则不应该加载某些内容。

如果您使用自定义类加载器,则所有赔率均已关闭,您需要提供代码示例。