Интерфейс ResourceBundleProvider
- Все известные реализующие классы:
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" имеет следующий класс реализации: 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" для французского языка. Традиционно ресурсы всех языков упаковываются в том же пакете, что и базовая база ресурсов. При развертывании ресурсов в нескольких модулях и двух модулях, содержащих пакеты с одинаковыми именами, разделение пакетов не поддерживается; ресурсы в каждом модуле могут быть упакованы в разные пакеты, как показано в этом примере, где этот поставщик упаковывает ресурсы в отдельный пакет для каждого языка, то есть com.example.app.fr для французского языка.
Поставщик может предоставлять более одной службы, каждая из которых является службой для ресурсов с разным базовым именем.
AbstractResourceBundleProvider предоставляет базовую реализацию для ResourceBundleProvider и подкласс может переопределить метод toBundleName, чтобы вернуть расположение ресурсов для загрузки, специфичное для поставщика, например, пакет для каждого языка. Поставщик может переопределить метод ResourceBundleProvider.getBundle, например, чтобы искать только известные поддерживаемые языки или возвращать ресурсы в других форматах, таких как XML.
Декларация модуля этого поставщика содержит следующую директиву:
provides com.example.app.spi.MyResourcesProvider with com.example.impl.MyResourcesProviderImpl;
Получение ресурсов от поставщиков
Декларация модуля модуля-потребителя, который вызывает один изResourceBundle.getBundle методов-фабрик для получения ресурсов от поставщиков услуг, должна содержать следующую директиву: uses com.example.app.spi.MyResourcesProvider;
ResourceBundle.getBundle("com.example.app.MyResource", locale) ищет и загружает поставщиков для com.example.app.spi.MyResourcesProvider службы, а затем вызывает ResourceBundleProvider.getBundle("com.example.app.MyResource", locale) для поиска ресурсов с заданным базовым именем и языком. Если модуль-потребитель — это поставщик службы ресурсов для com.example.app.spi.MyResourcesProvider, ResourceBundle.getBundle будет искать ресурсы только у поставщиков услуг. В противном случае ResourceBundle.getBundle может продолжить поиск ресурсов в других модулях и на пути класса в соответствии со спецификацией вызываемого метода ResourceBundle.getBundle.
- С:
- 9
- См. также:
-
AbstractResourceBundleProvider, Ресурсы и именованные модули,ServiceLoader
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
ResourceBundle |
getBundle(String baseName,
Locale locale) |
Возвращает |
Методы
getBundle
ResourceBundle getBundle(String baseName,
Locale locale)
Возвращает ResourceBundle для заданного имени пакета и языка. Этот метод возвращает null если ResourceBundle не найден для заданных параметров.
- Параметры:
-
baseName- базовое имя пакета ресурсов, полное имя класса -
locale- язык, для которого необходимо загрузить пакет ресурсов - Возвращает:
- созданный пакет ресурсов для заданных параметров или null, если пакет ресурсов для заданных параметров не найден
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/spi/ResourceBundleProvider.html