クラス ResourceBundleMessageSource

実装されたすべてのインターフェース:
AwareBeanClassLoaderAwareHierarchicalMessageSourceMessageSource

public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSource implements BeanClassLoaderAware
指定されたベース名を使用してリソースバンドルにアクセスする MessageSource 実装。このクラスは、MessageFormatSE が提供する JDK の標準メッセージ解析と組み合わせて、基礎となる JDK の ResourceBundleSE 実装に依存しています。

この MessageSource は、アクセスされた ResourceBundle インスタンスと、各メッセージの生成された MessageFormats の両方をキャッシュします。また、AbstractMessageSource 基本クラスでサポートされているように、MessageFormat なしの引数なしメッセージのレンダリングも実装します。この MessageSource によって提供されるキャッシュは、java.util.ResourceBundle クラスの組み込みキャッシュよりも大幅に高速です。

ベース名は ResourceBundleSE の規則に従います。基本的に、完全修飾クラスパスの場所です。パッケージ修飾子(org.mypackage など)が含まれていない場合は、クラスパスルートから解決されます。JDK の標準 ResourceBundle は、ドットをパッケージ区切り文字として扱うことに注意してください。これは、"test.theme" が事実上「テスト / テーマ」と同等であることを意味します。

クラスパスでは、バンドルリソースはローカルに構成された encoding で読み取られます。デフォルトでは ISO-8859-1 です。これを UTF-8 に切り替えるか、プラットフォームのデフォルトエンコーディングを null に切り替えることを検討してください。ローカルで提供される ResourceBundle.Control ハンドルがサポートされていない JDK9 + モジュールパスでは、この MessageSource は常にプラットフォームのデフォルトエンコーディングで ResourceBundle.getBundle(java.lang.String)SE 取得にフォールバックします: JDK 9+ で ISO-8859-1 フォールバックを使用する UTF-8("java.util.PropertyResourceBundle.encoding" を介して構成可能)システムプロパティ)。この場合も loadBundle(Reader)/loadBundle(InputStream) は呼び出されず、サブクラスのオーバーライドは事実上無視されることに注意してください。代わりに、JDK 9 java.util.spi.ResourceBundleProvider の実装を検討してください。

作成者:
Rod Johnson, Juergen Hoeller, Qimiao Chen
関連事項:
  • コンストラクターの詳細

    • ResourceBundleMessageSource

      public ResourceBundleMessageSource()
  • メソッドの詳細

    • setBundleClassLoader

      public void setBundleClassLoader(ClassLoaderSE classLoader)
      リソースバンドルを読み込む ClassLoader を設定します。

      デフォルトは BeanFactory の bean ClassLoader を含むか、BeanFactory 内で実行されていない場合は ClassUtils.getDefaultClassLoader() によって決定されるデフォルト ClassLoader です。

    • getBundleClassLoader

      @Nullable protected ClassLoaderSE getBundleClassLoader()
      リソースバンドルをロードする ClassLoader を返します。

      デフォルトは、BeanFactory の Bean ClassLoader を含んでいます。

      関連事項:
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoaderSE classLoader)
      インターフェースからコピーされた説明: BeanClassLoaderAware
      Bean class loaderSE を Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定、ただし InitializingBean's InitializingBean.afterPropertiesSet() メソッドやカスタム init-method などの初期化コールバックの前に呼び出さます。

      次で指定:
      インターフェース BeanClassLoaderAwaresetBeanClassLoader 
      パラメーター:
      classLoader - 所有クラスローダー
    • resolveCodeWithoutArguments

      @Nullable protected StringSE resolveCodeWithoutArguments(StringSE code, LocaleSE locale)
      登録されたリソースバンドルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま(MessageFormat 解析なしで)返します。
      オーバーライド:
      クラス AbstractMessageSourceresolveCodeWithoutArguments 
      パラメーター:
      code - 解決するメッセージのコード
      locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)
      戻り値:
      メッセージ文字列、または見つからない場合は null 
      関連事項:
    • resolveCode

      @Nullable protected MessageFormatSE resolveCode(StringSE code, LocaleSE locale)
      キャッシュされた MessageFormat インスタンスをメッセージコードごとに使用して、登録されたリソースバンドルのキーとして指定されたメッセージコードを解決します。
      次で指定:
      クラス AbstractMessageSourceresolveCode 
      パラメーター:
      code - 解決するメッセージのコード
      locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)
      戻り値:
      メッセージの MessageFormat。見つからない場合は null 
      関連事項:
    • getResourceBundle

      @Nullable protected ResourceBundleSE getResourceBundle(StringSE basename, LocaleSE locale)
      指定されたベース名とロケールの ResourceBundle を返し、すでに生成された ResourceBundle をキャッシュからフェッチします。
      パラメーター:
      basename - ResourceBundle のベース名
      locale - ResourceBundle を見つけるためのロケール
      戻り値:
      結果の ResourceBundle、または指定されたベース名とロケールで何も見つからなかった場合は null 
    • doGetBundle

      protected ResourceBundleSE doGetBundle(StringSE basename, LocaleSE locale) throws MissingResourceExceptionSE
      指定されたベース名とロケールのリソースバンドルを取得します。
      パラメーター:
      basename - 検索するベース名
      locale - 検索するロケール
      戻り値:
      対応する ResourceBundle
      例外:
      MissingResourceExceptionSE - 一致するバンドルが見つからなかった場合
      関連事項:
    • loadBundle

      protected ResourceBundleSE loadBundle(ReaderSE reader) throws IOExceptionSE
      指定されたリーダーからプロパティベースのリソースバンドルをロードします。

      これは、ResourceBundleMessageSource のデフォルトの ISO-8859-1 エンコーディングを含む "defaultEncoding" の場合に呼び出されます。このメソッドは ResourceBundle.Control でのみ呼び出すことができます。このようなコントロールハンドルがサポートされていない JDK 9+ モジュールパスで実行する場合、カスタムサブクラスのオーバーライドは事実上無視されます。

      デフォルトの実装は PropertyResourceBundleSE を返します。

      パラメーター:
      reader - ターゲットリソースのリーダー
      戻り値:
      完全にロードされたバンドル
      例外:
      IOExceptionSE - I/O 障害の場合
      導入:
      4.2
      関連事項:
    • loadBundle

      protected ResourceBundleSE loadBundle(InputStreamSE inputStream) throws IOExceptionSE
      指定された入力ストリームからプロパティベースのリソースバンドルをロードし、JDK 9 以降でデフォルトのプロパティエンコーディングを選択します。

      これは、"defaultEncoding" が null に設定されている場合にのみ呼び出され、プラットフォームのデフォルトエンコーディング(JDK 9+ で ISO-8859-1 フォールバックを備えた UTF-8 ですが、"java.util.PropertyResourceBundle.encoding" システムプロパティを介して構成可能)を明示的に適用します。このメソッドは ResourceBundle.Control でのみ呼び出すことができることに注意してください。このような制御ハンドルがサポートされていない JDK9 + モジュールパスで実行すると、カスタムサブクラスのオーバーライドは事実上無視されます。

      デフォルトの実装は PropertyResourceBundleSE を返します。

      パラメーター:
      inputStream - ターゲットリソースの入力ストリーム
      戻り値:
      完全にロードされたバンドル
      例外:
      IOExceptionSE - I/O 障害の場合
      導入:
      5.1
      関連事項:
    • getMessageFormat

      @Nullable protected MessageFormatSE getMessageFormat(ResourceBundleSE bundle, StringSE code, LocaleSE locale) throws MissingResourceExceptionSE
      指定されたバンドルとコードの MessageFormat を返し、すでに生成された MessageFormats をキャッシュから取得します。
      パラメーター:
      bundle - ResourceBundle に取り組む
      code - 取得するメッセージコード
      locale - MessageFormat の構築に使用するロケール
      戻り値:
      結果の MessageFormat、または指定されたコードに対してメッセージが定義されていない場合は null 
      例外:
      MissingResourceExceptionSE - ResourceBundle によってスローされた場合
    • getStringOrNull

      @Nullable protected StringSE getStringOrNull(ResourceBundleSE bundle, StringSE key)
      指定されたキーの文字列値を効率的に取得します。見つからない場合は null を返します。

      4.2 の時点で、デフォルトの実装は containsKey をチェックしてから getString を呼び出します(キーが見つからない場合は MissingResourceException をキャッチする必要があります)。

      サブクラスでオーバーライドできます。

      パラメーター:
      bundle - ResourceBundle で検索を実行します
      key - 見上げる鍵
      戻り値:
      関連する値、または存在しない場合は null 
      導入:
      4.2
      関連事項:
    • toString

      public StringSE toString()
      この MessageSource の構成を表示します。
      オーバーライド:
      クラス ObjectSEtoString