Java 9 之后加载类和资源

2024-02-13

我正在读书InfoQ 上的这篇文章 https://www.infoq.com/news/2017/06/oracle-defends-jpms引用莱因霍尔德的话:

开发人员仍然可以使用 Java 9 中的 Java 类路径来实现 Java 运行时搜索类和资源文件。只是这样与 Java 9的模块,开发者不再需要类路径。

所以现在我的问题是:执行上面列出的任务的正确 Java 9 方法是什么?你如何动态加载例如图像(没有摆弄相对路径)?

更有趣的是,如何检查一个类是否可用并动态做出决策(例如,检查 Jackson 是否可用,如果可用,则将其用于 JSON 序列化,如果不可用,则使用其他东西)?

文章还提到 Spring Boot 已经支持 Java 9,并且 Spring Boot 肯定做了很多动态加载。那么也许有人知道我可以看看的 Spring 代码的价格?


首先,澄清一下,我既没有说过也没有写过这段文字 上面引用了。我绝不会这么说。这只是马虎而已 对所涉及出版物的部分进行报道。

关于类加载和资源,最重要的是要理解 Java 9 中的查找在根本上没有改变。 您可以像平常一样搜索课程和资源 有,通过调用Class::forName以及各种getResource*方法 在里面Class and ClassLoader类,无论您的代码是否 从类路径或模块路径加载。还有三个 内置类加载器,就像 JDK 1.2 中一样,并且它们具有 相同的委托关系。因此,许多现有代码只是 有效,开箱即用。

有一些细微差别,如中所述JEP 261 http://openjdk.java.net/jeps/261#Class-loaders:具体类型 内置类加载器的数量已更改,某些类以前已更改 由引导类加载器加载的现在由平台类加载 加载器以提高安全性。现有代码假设 内置类加载器是URLClassLoader,或者一个类被加载 因此,引导类加载器可能需要进行细微调整。

最后一个重要的区别是模块中的非类文件资源 默认情况下是封装的,因此无法从外部找到 模块,除非其有效包是open https://docs.oracle.com/javase/9/docs/api/java/lang/Module.html#getResourceAsStream-java.lang.String-。 要从您自己的模块加载资源,最好使用 资源查找方法Class or Module,它可以定位任意 您模块中的资源,而不是ClassLoader, 哪个行 只定位非类文件资源open模块的包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 9 之后加载类和资源 的相关文章

  • 使用 ScriptEngine 从 JavaScript 调用 Java 方法

    我正在使用 ScriptEngine 运行 JavaScript 我希望 JavaScript 脚本能够调用 myFunction 其中 myFunction 是我的给定类中的一个方法 我知道可以将 importPackage 用于标准 J
  • 在 libgdx 中批处理多维数据集时出现问题

    我正在尝试开发一款游戏 在屏幕上渲染多达 300 个立方体 为每个多维数据集创建新的 modelInstance 时 modelBatch 的性能非常糟糕 据我所知 没有 3d 批处理可以将所有立方体批处理到一次绘制调用 所以我拼命地尝试以
  • 检查两个日期周期是否重叠[重复]

    这个问题在这里已经有答案了 我有两个日期范围 start1 end1 gt gt date1 start2 end2 gt gt date2 我想检查两个日期是否重叠 我的流程图我假设 运算符对于比较是有效的 boolean isOverL
  • Android 服务 START_STICKY START_NOT_STICKY

    我需要让我的服务始终在后台运行 并使用 startService 函数启动我的服务 无论应用程序的状态如何 我都不想重新启动服务 这是我的观察 START STICKY gt 如果应用程序启动 则服务正在重新启动 当应用程序关闭时 服务也会
  • java中的散列是如何工作的?

    我正在尝试弄清楚java中的哈希值 例如 如果我想在哈希图中存储一些数据 它是否会有某种带有哈希值的底层哈希表 或者 如果有人能够对哈希的工作原理给出一个很好且简单的解释 我将非常感激 HashMap 基本上在内部实现为数组Entry 如果
  • 获取文本文件中行的字节偏移量?

    我有一个文本文件 例如 one two three four five 我需要获取文件中每一行的偏移量 我如何在 Java 中做到这一点 我搜索了一些 I O 库 如 BufferedReader 和 RandomAccessFile 但我
  • rmi类找不到异常

    我使用 java rmi 编写了一个简单的项目并导出到可执行 jar 文件 当我尝试运行它时 有时会出现异常 有时会起作用 当我指定 Djava rmi server codebase file serverClasses 时 它似乎没有正
  • Maven 部署:deploy-file 发布所有文件而不是一个

    我正在使用 Maven 构建我的 Java 应用程序Maven 组装插件 https maven apache org plugins maven assembly plugin 创建一个可执行的 jar 因此 目标文件夹包含多个 jar
  • 在 Selenium Grid 中注册 PhantomJS 节点时出错

    我有以下问题 我成功启动了 Selenium Grid hub java jar selenium server standalone 2 53 0 jar role hub 之后我尝试使用以下命令启动 PhantomJS 节点 phant
  • 如何修复运行 Android 模拟器时出现 GPU Driver Issue 错误

    我的 Android 模拟器几周前运行良好 但现在出现错误 当我运行代码时 GPU 驱动程序问题错误对话框与模拟器一起弹出 当我单击 确定 时 Android 模拟器不会按预期运行应用程序 错误如下 Your GPU driver info
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • Spring Boot RestTemplate 连接池:管理过时连接

    我使用 RestTemplate 和 ConnectionPooling 使用 PoolingHttpClientConnectionManager 如下代码所示 PoolingHttpClientConnectionManager con
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • 避免加密和编码的 URL 字符串中的换行符

    我正在尝试实现一个简单的字符串编码器来混淆 URL 字符串的某些部分 以防止它们被用户弄乱 我使用的代码几乎与示例中的相同JCA指南 http docs oracle com javase 6 docs technotes guides s
  • 如何在 Windows 上使用 Java Hotspot JVM 禁用小型转储 (mdmp) 文件生成

    目前 我有一个已部署的可执行 jar 文件 该文件在崩溃时会创建大型 7 Gb 小型转储文件 我想要一个导致崩溃原因的文本表示 而不是 JVM 状态的二进制文件 我尝试使用中找到的信息这个 CodeRanch 帖子 http www cod
  • 如何在 Android 应用程序退出之前进行一些清理?

    当我的 Android 应用程序终止时 是否有某种 onTerminate 方法可以进行一些清理 我想清除一些 SharedPreferences 我有一个活动 它保持几个数字的运行平均值 并将其存储在 SharedPreference 中
  • 如何在 Spring boot 应用程序中使用禁用连接池?

    我在 Application java 中创建一个像这样的数据源 Bean ConfigurationProperties datasource public DataSource dataSource return DataSourceB
  • 项目级别的@PowerMockIgnore

    在 Maven 中运行时 我的 powermock 测试用例出现以下错误 java lang LinkageError loader constraint violation loader instance of org powermock

随机推荐