也许这是一个简单的问题,但仍然可以找到如何做到这一点。假设我使用以下代码来创建层
ModuleFinder finder = ModuleFinder.of(moduleCPath); ModuleLayer parent = ModuleLayer.boot(); Configuration cf = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of("module-c")); ClassLoader scl = ClassLoader.getSystemClassLoader(); ModuleLayer myLayer = parent.defineModulesWithOneLoader(cf, scl);
myLayer 创建了一个类加载器。我怎样才能得到这个类加载器的引用 不知道里面有什么课程 模块?
myLayer
当 ModuleLayer 每个 Module ClassLoader
ModuleLayer
Module
ClassLoader
层是从配置和函数中的模块图创建的 .
模块层 没有一个概念 因为不能保证 会有同样的 类装载器 . 取而代之的是 模块 Module.getClassLoader() .
模块层
类装载器
模块
Module.getClassLoader()
既然你用的是 ModuleLayer.defineModulesWithOneLoader(Configuration,ClassLoader) 1 然而,这里 保证每个 会有同样的 . 这意味着你可以得到 类装载器 模块 在 模块层 并将其视为 类装载器 的 模块层
ModuleLayer.defineModulesWithOneLoader(Configuration,ClassLoader)
ModuleLayer layer = parent.defineModulesWithOneLoader(...); ClassLoader loader = layer.modules().iterator().next().getClassLoader();
请注意,如果出现以下情况,这将无法正常工作:
iterator().next()
NoSuchElementException
defineModulesWithManyLoaders(Configuration,ClassLoader)
defineModules(Configuration,Function)
Function
1方法 defineModulesWithOneLoader 和 defineModulesWithManyLoaders defineModules 对于两个预定义的用例;每个 模块 有相同的 以及每个 模块 有自己的 类装载器 分别是。
defineModulesWithOneLoader
defineModulesWithManyLoaders
defineModules