public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSource implements BeanClassLoaderAware
MessageSource
実装。このクラスは、MessageFormat
によって提供される JDK の標準メッセージ解析と組み合わせて、基盤となる JDK の ResourceBundle
実装に依存しています。 この MessageSource は、アクセスされた ResourceBundle インスタンスと、各メッセージの生成された MessageFormats の両方をキャッシュします。また、AbstractMessageSource 基本クラスでサポートされているように、MessageFormat なしの引数なしメッセージのレンダリングも実装します。この MessageSource によって提供されるキャッシュは、java.util.ResourceBundle
クラスの組み込みキャッシュよりも大幅に高速です。
ベース名は ResourceBundle
の規則に従います。基本的に、完全修飾されたクラスパスの場所です。パッケージ修飾子(org.mypackage
など)が含まれていない場合は、クラスパスルートから解決されます。JDK の標準 ResourceBundle は、ドットをパッケージ区切り文字として扱うことに注意してください。これは、"test.theme" が事実上「テスト / テーマ」と同等であることを意味します。
クラスパスでは、バンドルリソースはローカルに構成された encoding
で読み取られます。デフォルトでは ISO-8859-1 です。これを UTF-8 に切り替えるか、プラットフォームのデフォルトエンコーディングを null
に切り替えることを検討してください。ローカルで提供される ResourceBundle.Control
ハンドルがサポートされていない JDK9 + モジュールパスでは、この MessageSource は常にプラットフォームのデフォルトエンコーディングで ResourceBundle.getBundle(java.lang.String)
取得にフォールバックします: JDK 9+ で ISO-8859-1 フォールバックを使用する UTF-8("java.util.PropertyResourceBundle.encoding" を介して構成可能)システムプロパティ)。この場合も loadBundle(Reader)
/loadBundle(InputStream)
は呼び出されず、サブクラスのオーバーライドは事実上無視されることに注意してください。代わりに、JDK 9 java.util.spi.ResourceBundleProvider
の実装を検討してください。
AbstractResourceBasedMessageSource.setBasenames(java.lang.String...)
, ReloadableResourceBundleMessageSource
, ResourceBundle
, MessageFormat
logger
コンストラクターと説明 |
---|
ResourceBundleMessageSource() |
修飾子と型 | メソッドと説明 |
---|---|
protected java.util.ResourceBundle | doGetBundle(java.lang.String basename, java.util.Locale locale) 指定されたベース名とロケールのリソースバンドルを取得します。 |
protected java.lang.ClassLoader | getBundleClassLoader() リソースバンドルをロードする ClassLoader を返します。 |
protected java.text.MessageFormat | getMessageFormat(java.util.ResourceBundle bundle, java.lang.String code, java.util.Locale locale) 指定されたバンドルとコードの MessageFormat を返し、すでに生成された MessageFormats をキャッシュから取得します。 |
protected java.util.ResourceBundle | getResourceBundle(java.lang.String basename, java.util.Locale locale) 指定されたベース名とコードに対して ResourceBundle を返し、すでに生成された MessageFormats をキャッシュから取得します。 |
protected java.lang.String | getStringOrNull(java.util.ResourceBundle bundle, java.lang.String key) 指定されたキーの文字列値を効率的に取得します。見つからない場合は null を返します。 |
protected java.util.ResourceBundle | loadBundle(java.io.InputStream inputStream) 指定された入力ストリームからプロパティベースのリソースバンドルをロードし、JDK 9 以降でデフォルトのプロパティエンコーディングを選択します。 |
protected java.util.ResourceBundle | loadBundle(java.io.Reader reader) 指定されたリーダーからプロパティベースのリソースバンドルをロードします。 |
protected java.text.MessageFormat | resolveCode(java.lang.String code, java.util.Locale locale) キャッシュされた MessageFormat インスタンスをメッセージコードごとに使用して、登録されたリソースバンドルのキーとして指定されたメッセージコードを解決します。 |
protected java.lang.String | resolveCodeWithoutArguments(java.lang.String code, java.util.Locale locale) 登録されたリソースバンドルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま(MessageFormat 解析なしで)返します。 |
void | setBeanClassLoader(java.lang.ClassLoader classLoader) Bean class loader を Bean インスタンスに提供するコールバック。 |
void | setBundleClassLoader(java.lang.ClassLoader classLoader) リソースバンドルを読み込む ClassLoader を設定します。 |
java.lang.String | toString() この MessageSource の構成を表示します。 |
addBasenames, getBasenameSet, getCacheMillis, getDefaultEncoding, isFallbackToSystemLocale, setBasename, setBasenames, setCacheMillis, setCacheSeconds, setDefaultEncoding, setFallbackToSystemLocale
getCommonMessages, getDefaultMessage, getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setCommonMessages, setParentMessageSource, setUseCodeAsDefaultMessage
createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormat
public void setBundleClassLoader(java.lang.ClassLoader classLoader)
デフォルトは BeanFactory の bean ClassLoader
を含むか、BeanFactory 内で実行されていない場合は ClassUtils.getDefaultClassLoader()
によって決定されるデフォルト ClassLoader です。
@Nullable protected java.lang.ClassLoader getBundleClassLoader()
デフォルトは、BeanFactory の Bean ClassLoader を含んでいます。
public void setBeanClassLoader(java.lang.ClassLoader classLoader)
BeanClassLoaderAware
class loader
を Bean インスタンスに提供するコールバック。 通常の Bean プロパティの設定後、ただし InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanClassLoaderAware
の setBeanClassLoader
classLoader
- 所有クラスローダー protected java.lang.String resolveCodeWithoutArguments(java.lang.String code, java.util.Locale locale)
AbstractMessageSource
の resolveCodeWithoutArguments
code
- 解決するメッセージのコード locale
- コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null
AbstractMessageSource.resolveCode(java.lang.String, java.util.Locale)
, MessageFormat
@Nullable protected java.text.MessageFormat resolveCode(java.lang.String code, java.util.Locale locale)
AbstractMessageSource
の resolveCode
code
- 解決するメッセージのコード locale
- コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null
AbstractMessageSource.resolveCodeWithoutArguments(String, java.util.Locale)
@Nullable protected java.util.ResourceBundle getResourceBundle(java.lang.String basename, java.util.Locale locale)
basename
- ResourceBundle のベース名 locale
- ResourceBundle を見つけるためのロケール null
protected java.util.ResourceBundle doGetBundle(java.lang.String basename, java.util.Locale locale) throws java.util.MissingResourceException
basename
- 検索するベース名 locale
- 検索するロケール java.util.MissingResourceException
- 一致するバンドルが見つからなかった場合 ResourceBundle.getBundle(String, Locale, ClassLoader)
, getBundleClassLoader()
protected java.util.ResourceBundle loadBundle(java.io.Reader reader) throws java.io.IOException
これは、ResourceBundleMessageSource
のデフォルトの ISO-8859-1 エンコーディングを含む "defaultEncoding"
の場合に呼び出されます。このメソッドは ResourceBundle.Control
でのみ呼び出すことができます。このようなコントロールハンドルがサポートされていない JDK 9+ モジュールパスで実行する場合、カスタムサブクラスのオーバーライドは事実上無視されます。
デフォルトの実装は PropertyResourceBundle
を返します。
reader
- ターゲットリソースのリーダー java.io.IOException
- I/O 障害の場合 loadBundle(InputStream)
, PropertyResourceBundle.PropertyResourceBundle(Reader)
protected java.util.ResourceBundle loadBundle(java.io.InputStream inputStream) throws java.io.IOException
これは、"defaultEncoding"
が null
に設定されている場合にのみ呼び出され、プラットフォームのデフォルトエンコーディング(JDK 9+ で ISO-8859-1 フォールバックを備えた UTF-8 ですが、"java.util.PropertyResourceBundle.encoding" システムプロパティを介して構成可能)を明示的に適用します。このメソッドは ResourceBundle.Control
でのみ呼び出すことができることに注意してください。このような制御ハンドルがサポートされていない JDK9 + モジュールパスで実行すると、カスタムサブクラスのオーバーライドは事実上無視されます。
デフォルトの実装は PropertyResourceBundle
を返します。
inputStream
- ターゲットリソースの入力ストリーム java.io.IOException
- I/O 障害の場合 loadBundle(Reader)
, PropertyResourceBundle.PropertyResourceBundle(InputStream)
@Nullable protected java.text.MessageFormat getMessageFormat(java.util.ResourceBundle bundle, java.lang.String code, java.util.Locale locale) throws java.util.MissingResourceException
bundle
- ResourceBundle に取り組む code
- 取得するメッセージコード locale
- MessageFormat の構築に使用するロケール null
java.util.MissingResourceException
- ResourceBundle によってスローされた場合 @Nullable protected java.lang.String getStringOrNull(java.util.ResourceBundle bundle, java.lang.String key)
null
を返します。4.2 の時点で、デフォルトの実装は containsKey
をチェックしてから getString
を呼び出します(キーが見つからない場合は MissingResourceException
をキャッチする必要があります)。
サブクラスでオーバーライドできます。
bundle
- ResourceBundle で検索を実行します key
- 見上げる鍵 null
ResourceBundle.getString(String)
, ResourceBundle.containsKey(String)
public java.lang.String toString()
java.lang.Object
の toString