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