如何在OSGI中通过它的名字获取类加载器?

时间:2013-01-28 09:52:51

标签: osgi classloader

如何通过OSGI中的It名称为给定的类获取类加载器? 该类在另一个包中声明,可能不会导出。

2 个答案:

答案 0 :(得分:3)

这基本上是不可能的,因为类的名称不足以唯一地标识它。多个模块可能包含具有相同名称的类;这是提供模块隔离的任何模块系统的必然属性。

事实上,它在理论上也不可能在“普通”Java中,因为类的标识由其完全限定名称和ClassLoader组成。所以你问的是如何只给出另一半给出的一半的身份。

如果您确实知道哪个包/模块包含该类,那么您可以使用Bundle.loadClass("Foo")从该包中加载该类,并从可以调用getClassLoader()的Class对象加载。

答案 1 :(得分:0)

为什么要从其他捆绑包中加载该类?更简洁的方法是在包含它的包中实例化该类并将其作为服务发布。或者,如果您需要多个实例,则可以将Factory注册为服务。