簡體   English   中英

如何獲取新創建的JPMS層的ClassLoader?

[英]How to get ClassLoader of newly created JPMS layer?

也許這是一個簡單的問題,但仍然可以找到方法。 假設我使用以下代碼創建圖層

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一個類加載器。 在不知道myLayer模塊中可以包含哪些類的情況下,如何獲得對該類加載器的引用, myLayer加載器具有對myLayer引用?

創建ModuleLayer ,每個Module都將映射到ClassLoader

ModuleLayer

根據Configuration中的模塊圖和將每個模塊映射到ClassLoader的函數創建一個圖層。

ModuleLayer沒有ClassLoader概念,因為不能保證每個Module都具有相同的ClassLoader 相反, ClassLoader與每個單獨的Module相關聯,您可以通過Module.getClassLoader()

但是,由於您使用的是ModuleLayer.defineModulesWithOneLoader(Configuration,ClassLoader) 1 ,因此可以保證每個Module都具有相同的ClassLoader 這意味着您可以從ModuleLayer任何Module獲取ClassLoader ,並將其視為“ ModuleLayer ClassLoader ”。

ModuleLayer layer = parent.defineModulesWithOneLoader(...);
ClassLoader loader = layer.modules().iterator().next().getClassLoader();

請注意,在以下情況下,此功能將無法正常工作:


1.方法defineModulesWithOneLoaderdefineModulesWithManyLoaders是兩個預定義用例中defineModules便捷方法; 每個Module具有相同的ClassLoader和每個Module具有自己的ClassLoader

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM