Spec-Zone.ru › OpenJDK 21

Интерфейс 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 для заданных параметров

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

Spec-Zone.ru

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