Spec-Zone.ru › OpenJDK 24

Интерфейс 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 — языковой вариант, для которого должен быть загружен пакет ресурсов
Возвращает:
созданный пакет ресурсов для заданных параметров или null, если не найдено ResourceBundle для заданных параметров

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/spi/ResourceBundleProvider.html

Spec-Zone.ru

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