クラス ReloadableResourceBundleMessageSource
- 実装されたすべてのインターフェース:
Aware
、HierarchicalMessageSource
、MessageSource
、ResourceLoaderAware
ApplicationContext
のリソースロードに参加する、Spring 固有の MessageSource
実装。JDK ベースの ResourceBundleMessageSource
とは対照的に、このクラスはメッセージのカスタムデータ構造として Properties
SE インスタンスを使用し、Spring Resource
ハンドルから PropertiesPersister
戦略を介してロードします。この方法では、タイムスタンプの変更に基づいてファイルを再ロードできるだけでなく、特定の文字エンコーディングでプロパティファイルをロードすることもできます。XML プロパティファイルも検出します。
"basenames"
プロパティとして設定されたベース名は、ResourceBundleMessageSource
の "basenames" プロパティとは少し異なる方法で処理されることに注意してください。ファイル拡張子や言語コードを指定しないという基本的な ResourceBundle ルールに従いますが、クラスパスリソースに制限されるのではなく、任意の Spring リソースの場所を参照できます。"classpath:" プレフィックスを使用すると、リソースはクラスパスからロードできますが、この場合、"-1" (永久にキャッシュ) 以外の "cacheSeconds" 値は確実に機能しない可能性があります。
典型的な Web アプリケーションの場合、メッセージファイルは WEB-INF
に配置できます。たとえば、"WEB-INF/messages" ベース名は "WEB-INF/messages.properties"、"WEB-INF/messages_en.properties" などの配置も検索します "WEB-INF/messages.xml"、"WEB-INF/messages_en.xml" など。順次検索により、 前のリソースバンドルのメッセージ定義が後のバンドルのメッセージ定義をオーバーライドすることに注意してください。
この MessageSource は、ApplicationContext
の外部で簡単に使用できます。デフォルトとして DefaultResourceLoader
を使用し、コンテキストで実行している場合は、ApplicationContext のリソースローダーでオーバーライドされます。その他の特定の依存関係はありません。
このメッセージソースの初期実装を提供してくれた Thomas Achleitner に感謝します。
- 作成者:
- Juergen Hoeller
- 関連事項:
AbstractResourceBasedMessageSource.setCacheSeconds(int)
AbstractResourceBasedMessageSource.setBasenames(java.lang.String...)
AbstractResourceBasedMessageSource.setDefaultEncoding(java.lang.String)
setFileEncodings(java.util.Properties)
setPropertiesPersister(org.springframework.util.PropertiesPersister)
setResourceLoader(org.springframework.core.io.ResourceLoader)
DefaultResourceLoader
ResourceBundleMessageSource
ResourceBundle
SE
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明protected class
キャッシュ用の PropertiesHolder。フィールドサマリー
クラス org.springframework.context.support.MessageSourceSupport から継承されたフィールド
logger
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明calculateAllFilenames
(StringSE basename, LocaleSE locale) 指定されたバンドルのベース名とロケールのすべてのファイル名を計算します。calculateFilenamesForLocale
(StringSE basename, LocaleSE locale) 特定のバンドルのベース名とロケールのファイル名を計算し、言語コード、国コード、バリアントコードを追加します。void
リソースバンドルキャッシュをクリアします。void
この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。getMergedProperties
(LocaleSE locale) 指定されたすべてのリソースバンドルをマージした後、ロケールに実際に表示されるプロパティを含む PropertiesHolder を取得します。getProperties
(StringSE filename) 指定されたファイル名の PropertiesHolder を、キャッシュから、新たにロードして取得します。protected PropertiesSE
loadProperties
(Resource resource, StringSE filename) 指定されたリソースからプロパティをロードします。protected PropertiesSE
プレーンな新しいProperties
SE インスタンスを作成するためのテンプレートメソッド。refreshProperties
(StringSE filename, ReloadableResourceBundleMessageSource.PropertiesHolder propHolder) 指定されたバンドルファイル名の PropertiesHolder をリフレッシュします。protected MessageFormatSE
resolveCode
(StringSE code, LocaleSE locale) メッセージコードごとにキャッシュされた MessageFormat インスタンスを使用して、取得されたバンドルファイルのキーとして指定されたメッセージコードを解決します。protected StringSE
resolveCodeWithoutArguments
(StringSE code, LocaleSE locale) 取得されたバンドルファイルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま返します(MessageFormat 解析なし)。void
setConcurrentRefresh
(boolean concurrentRefresh) 同時リフレッシュ動作を許可するかどうかを指定します。void
setFileEncodings
(PropertiesSE fileEncodings) プロパティファイルの解析に使用するファイルごとの文字セットを設定します。void
setPropertiesPersister
(PropertiesPersister propertiesPersister) プロパティファイルの解析に使用する PropertiesPersister を設定します。void
setResourceLoader
(ResourceLoader resourceLoader) バンドルプロパティファイルのロードに使用する ResourceLoader を設定します。toString()
クラス org.springframework.context.support.AbstractResourceBasedMessageSource から継承されたメソッド
addBasenames, getBasenameSet, getCacheMillis, getDefaultEncoding, getDefaultLocale, isFallbackToSystemLocale, setBasename, setBasenames, setCacheMillis, setCacheSeconds, setDefaultEncoding, setDefaultLocale, setFallbackToSystemLocale
クラス org.springframework.context.support.AbstractMessageSource から継承されたメソッド
getCommonMessages, getDefaultMessage, getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setCommonMessages, setParentMessageSource, setUseCodeAsDefaultMessage
クラス org.springframework.context.support.MessageSourceSupport から継承されたメソッド
createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormat
コンストラクターの詳細
ReloadableResourceBundleMessageSource
public ReloadableResourceBundleMessageSource()
メソッドの詳細
setFileEncodings
プロパティファイルの解析に使用するファイルごとの文字セットを設定します。クラシックプロパティファイルにのみ適用され、XML ファイルには適用されません。
- パラメーター:
fileEncodings
- ファイル名をキー、文字セット名を値とするプロパティ。ファイル名は、オプションのロケール固有のコンポーネントを使用して、basename 構文と一致する必要があります。"WEB-INF/messages" または "WEB-INF/messages_en"。- 関連事項:
setConcurrentRefresh
public void setConcurrentRefresh(boolean concurrentRefresh) 同時リフレッシュ動作を許可するかどうかを指定します。つまり、特定のキャッシュされたプロパティファイルのリフレッシュ試行で 1 つのスレッドがロックされる一方で、リフレッシュ試行が完了するまで、他のスレッドはしばらくの間古いプロパティを返し続けます。デフォルトは「true」: この動作は Spring Framework 4.1 から新しくなり、スレッド間の競合を最小限に抑えています。以前の動作、つまりリフレッシュ時に完全にブロックする場合は、このフラグを "false" に切り替えます。
setPropertiesPersister
プロパティファイルの解析に使用する PropertiesPersister を設定します。デフォルトは
DefaultPropertiesPersister
です。setResourceLoader
バンドルプロパティファイルのロードに使用する ResourceLoader を設定します。デフォルトは DefaultResourceLoader です。ResourceLoaderAware インターフェースを実装しているため、コンテキストで実行している場合、ApplicationContext によってオーバーライドされます。ApplicationContext の外部で実行している場合は、手動でオーバーライドできます。
- 次で指定:
- インターフェース
ResourceLoaderAware
のsetResourceLoader
- パラメーター:
resourceLoader
- このオブジェクトによって使用される ResourceLoader オブジェクト- 関連事項:
resolveCodeWithoutArguments
取得されたバンドルファイルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま返します(MessageFormat 解析なし)。- オーバーライド:
- クラス
AbstractMessageSource
のresolveCodeWithoutArguments
- パラメーター:
code
- 解決するメッセージのコードlocale
- コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)- 戻り値:
- メッセージ文字列、または見つからない場合は
null
- 関連事項:
resolveCode
メッセージコードごとにキャッシュされた MessageFormat インスタンスを使用して、取得されたバンドルファイルのキーとして指定されたメッセージコードを解決します。- 次で指定:
- クラス
AbstractMessageSource
のresolveCode
- パラメーター:
code
- 解決するメッセージのコードlocale
- コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)- 戻り値:
- メッセージの MessageFormat。見つからない場合は
null
- 関連事項:
getMergedProperties
protected ReloadableResourceBundleMessageSource.PropertiesHolder getMergedProperties(LocaleSE locale) 指定されたすべてのリソースバンドルをマージした後、ロケールに実際に表示されるプロパティを含む PropertiesHolder を取得します。ホルダーをキャッシュからフェッチするか、新たにロードします。リソースバンドルの内容を永久にキャッシュする場合にのみ使用されます (つまり、cacheSeconds < 0)。マージされたプロパティは常に永久にキャッシュされます。
calculateAllFilenames
指定されたバンドルのベース名とロケールのすべてのファイル名を計算します。指定されたロケール、システムロケール(該当する場合)、デフォルトファイルのファイル名を計算します。- パラメーター:
basename
- バンドルのベース名locale
- ロケール- 戻り値:
- チェックするファイル名のリスト
- 関連事項:
calculateFilenamesForLocale
特定のバンドルのベース名とロケールのファイル名を計算し、言語コード、国コード、バリアントコードを追加します。例: basename "messages"、Locale "de_AT_oo" → "messages_de_AT_OO"、"messages_de_AT"、"messages_de"。
Locale.toString()
で定義されたルールに従います。- パラメーター:
basename
- バンドルのベース名locale
- ロケール- 戻り値:
- チェックするファイル名のリスト
getProperties
指定されたファイル名の PropertiesHolder を、キャッシュから、新たにロードして取得します。- パラメーター:
filename
- バンドルのファイル名 (ベース名 + ロケール)- 戻り値:
- バンドルの現在の PropertiesHolder
refreshProperties
protected ReloadableResourceBundleMessageSource.PropertiesHolder refreshProperties(StringSE filename, @Nullable ReloadableResourceBundleMessageSource.PropertiesHolder propHolder) 指定されたバンドルファイル名の PropertiesHolder をリフレッシュします。ホルダーは、以前にキャッシュされていない場合はnull
か、タイムアウトしたキャッシュエントリ(現在の最終変更タイムスタンプに対して再検証される可能性があります)になります。- パラメーター:
filename
- バンドルのファイル名 (ベース名 + ロケール)propHolder
- バンドルの現在の PropertiesHolder
loadProperties
指定されたリソースからプロパティをロードします。- パラメーター:
resource
- ロード元のリソースfilename
- 元のバンドルファイル名 (ベース名 + ロケール)- 戻り値:
- 移入された Properties インスタンス
- 例外:
IOExceptionSE
- プロパティの読み込みに失敗した場合
newProperties
プレーンな新しいProperties
SE インスタンスを作成するためのテンプレートメソッド。デフォルトの実装では、単にProperties()
を呼び出します。サブクラスでカスタム
Properties
SE 拡張を返すことができます。オーバーライドするメソッドは、カスタムProperties
SE サブクラスをインスタンス化するだけで、その時点でそれ以上の初期化やポピュレーションは実行されません。- 戻り値:
- プレーンプロパティインスタンス
- 導入:
- 4.2
clearCache
public void clearCache()リソースバンドルキャッシュをクリアします。その後の resolve 呼び出しは、プロパティファイルのリロードにつながります。clearCacheIncludingAncestors
public void clearCacheIncludingAncestors()この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。- 関連事項:
toString