Spec-Zone.ru › OpenJDK 17

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

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

Spec-Zone.ru

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