- 所有已知的实现类:
AbstractResourceBundleProvider
public interface ResourceBundleProvider
ResourceBundleProvider 是资源包的服务提供者接口。 ResourceBundle.getBundle 工厂方法使用它来定位和加载通过 ServiceLoader 作为模块部署的服务提供者。
开发资源包服务
给定baseName 资源包的服务必须具有以下形式的完全限定类名:
<package of baseName> + ".spi." + <simple name of baseName> + "Provider"
服务类型位于 spi 子包中,因为它可以打包在与资源包提供程序分开的模块中。例如,名为 com.example.app.MyResources 的资源包的服务必须是 com.example.app.spi.MyResourcesProvider :
package com.example.app.spi; public interface MyResourcesProvider extends ResourceBundleProvider { }
部署资源包服务提供者
资源包可以以模块的形式部署在一个或多个服务提供者中。例如,名为“com.example.app.spi.MyResourcesProvider”的服务提供者具有以下实现类:
此示例提供法语locale的“import com.example.app.spi.MyResourcesProvider; class MyResourcesProviderImpl extends AbstractResourceBundleProvider implements MyResourcesProvider { public MyResourcesProviderImpl() { super("java.properties"); } // this provider maps the resource bundle to per-language package protected String toBundleName(String baseName, Locale locale) { return "p." + locale.getLanguage() + "." + baseName; } public ResourceBundle getBundle(String baseName, Locale locale) { // this module only provides bundles in French if (locale.equals(Locale.FRENCH)) { return super.getBundle(baseName, locale); } // otherwise return null return null; } }
com.example.app.MyResources”资源包。传统上,所有locale的资源包都打包在与资源包基本名称相同的包中。当在多个模块和两个包含同名包 split package 的模块中部署资源包时,不支持,每个模块中的资源包可以打包在不同的包中,如本例所示,此提供程序打包资源包在每个语言包中,即法语locale的 com.example.app.fr。
提供者可以提供多个服务,每个服务都是针对具有不同基本名称的资源包的服务。
AbstractResourceBundleProvider 为 ResourceBundleProvider 提供了基本实现,子类可以覆盖 toBundleName 方法以返回要加载的资源的提供者特定位置,例如,每个语言包。提供者可以覆盖 ResourceBundleProvider.getBundle 方法,例如仅搜索已知支持的locale或返回其他格式(如 XML)的资源包。
此提供者模块的模块声明指定以下指令:
provides com.example.app.spi.MyResourcesProvider with com.example.impl.MyResourcesProviderImpl;
从提供者处获取资源包
调用ResourceBundle.getBundle 工厂方法之一以从服务提供者获取资源包的 consumer module 的模块声明必须指定以下指令:基本名称和locale。如果消费者模块是 com.example.app.spi.MyResourcesProvider 的资源包服务提供者,ResourceBundle.getBundle 将仅从服务提供者处定位资源包。否则,ResourceBundle.getBundle 可能会根据正在调用的 ResourceBundle.getBundle 方法的规范继续在其他模块和类路径中搜索资源包。
- 自从:
- 9
- 参见:
-
方法总结
修饰符和类型方法描述为给定的包名称和locale返回一个ResourceBundle。
-
方法详情
-
getBundle
为给定的包名称和locale返回一个ResourceBundle。如果没有找到给定参数的ResourceBundle,则此方法返回null。- 参数:
baseName- 资源包的基本包名,一个完全限定的类名locale- 应为其加载资源包的locale- 返回:
-
为给定参数创建的 ResourceBundle,如果没有找到给定参数的
ResourceBundle,则返回 null
-