Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过It为类获取类加载器&x27;谁的名字在OSGI中?_Osgi_Classloader - Fatal编程技术网

如何通过It为类获取类加载器&x27;谁的名字在OSGI中?

如何通过It为类获取类加载器&x27;谁的名字在OSGI中?,osgi,classloader,Osgi,Classloader,如何在OSGI中通过给定类的名称获取该类的类加载器? 该类在另一个包中声明,可能不会导出。这基本上是不可能的,因为类的名称不足以唯一标识它。多个模块可能包含同名的类;这是任何提供模块隔离的模块系统不可避免的特性 事实上,在“普通”Java中,这在理论上也是不可能的,因为类的标识由其完全限定名和类加载器组成。因此,您要问的是,如果只给定另一半,如何得到一个类的一半标识 如果您确实知道哪个捆绑包/模块包含该类,那么您可以使用bundle.loadClass(“Foo”)从该捆绑包加载该类,并从类对象

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

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

事实上,在“普通”Java中,这在理论上也是不可能的,因为类的标识由其完全限定名和类加载器组成。因此,您要问的是,如果只给定另一半,如何得到一个类的一半标识


如果您确实知道哪个捆绑包/模块包含该类,那么您可以使用
bundle.loadClass(“Foo”)
从该捆绑包加载该类,并从类对象调用
getClassLoader()

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

事实上,在“普通”Java中,这在理论上也是不可能的,因为类的标识由其完全限定名和类加载器组成。因此,您要问的是,如果只给定另一半,如何得到一个类的一半标识


如果您确实知道哪个捆绑包/模块包含该类,那么您可以使用
bundle.loadClass(“Foo”)
从该捆绑包加载该类,并可以从类对象调用
getClassLoader()

为什么要从另一个捆绑包加载该类?更干净的方法是在包含该类的捆绑包中实例化该类并将其发布为服务。或者,如果您需要多个实例,可以将工厂注册为服务。

为什么要从另一个捆绑包加载该类?更干净的方法是在包含该类的捆绑包中实例化该类并将其发布为服务。或者,如果您需要多个实例,您可以将工厂注册为服务。

也许您可以解释为什么要这样做,以便我们可以找到另一个解决方案。也许您可以解释为什么要这样做,以便我们可以找到另一个解决方案。