Spec-Zone.ru › OpenJDK 25

Интерфейс 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)
Возвращает ResourceBundle для указанного имени пакета и локали.

Подробное описание методов

getBundle

ResourceBundle getBundle(String baseName, Locale locale)
Возвращает ResourceBundle для указанного имени пакета и локали. Этот метод возвращает null, если для заданных параметров не найден ResourceBundle.
Параметры:
baseName — базовое имя пакета ресурсов, полное имя класса
locale — локаль, для которой необходимо загрузить пакет ресурсов
Возвращает:
ResourceBundle, созданный для заданных параметров, или null, если для заданных параметров не найден ResourceBundle

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, где приведены более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.base/java/util/spi/ResourceBundleProvider.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API