我很难理解 ResourceBundle.getBundle(bundleName, locale, classLoader)
API 中 classLoader 的重要性。
有人想要为此 API 提供自定义加载程序的实际场景是什么?
最佳答案
一个 Java 应用程序可能有多个类加载器。例如,在 Tomcat 或 Glassfish 上运行的 J2EE 应用程序具有多层类加载器 - 有些属于 J2EE 服务器本身,有些是专门为您的 Web 应用程序制作的(否则您的 Web 应用程序将能够访问属于其他 Web 应用程序的类),甚至是自定义的类加载器您可能自己实例化的类加载器。
独立的 Java 应用程序也可能有多个类加载器。例如,如果您的应用程序支持插件,并且每个插件都包含在其自己的 JAR 文件(本地或远程)中,那么为了在运行时加载插件的类,您必须创建自己的类加载器来执行此操作。
因此,当您加载ResourceBundle
时,您必须选择适当的类加载器以确保从正确的源加载资源。这是一个简单的例子...假设您的应用程序包含一个 /version.properties
文件,并且您的 JVM 也有一个类似但不同的 /version.properties
(例如 IBM 的Java 有这个属性文件)。尝试使用系统的默认类加载器加载此资源文件会返回 JVM 中包含的 version.properties
,并且为了加载您自己的此文件版本,您必须使用自定义类加载器或其类加载器上下文特定于您的应用。
关于类加载器如何工作以及层次结构和加载上下文在实践中如何有用,有一个古老但仍然非常有趣的解释。欲了解更多信息,请查看Internals of Java Class Loading .
关于java - 类加载器在加载资源包中的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27499874/