Интерфейс 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
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ResourceBundle |
getBundle |
Возвращает 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