クラス ReloadableResourceBundleMessageSource
- 実装されているすべてのインターフェース:
Aware, HierarchicalMessageSource, MessageSource, ResourceLoaderAware
ApplicationContext のリソースロードに参加する、Spring 固有の MessageSource 実装。JDK ベースの ResourceBundleMessageSource とは対照的に、このクラスはメッセージのカスタムデータ構造として PropertiesSE インスタンスを使用し、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, Sebastien Deleuze
- 関連事項:
ネストされたクラスの要約
ネストされたクラス修飾子と型クラス説明protected classキャッシュ用の PropertiesHolder。フィールドのサマリー
クラス MessageSourceSupport から継承されたフィールド
loggerコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明calculateAllFilenames(StringSE basename, LocaleSE locale) 指定されたバンドルのベース名とロケールのすべてのファイル名を計算します。calculateFilenamesForLocale(StringSE basename, LocaleSE locale) 特定のバンドルのベース名とロケールのファイル名を計算し、言語コード、国コード、バリアントコードを追加します。voidリソースバンドルキャッシュをクリアします。voidこの MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。collectPropertiesToMerge(LocaleSE locale) 指定されたベース名に基づいてマージするプロパティを決定します。getMergedProperties(LocaleSE locale) 指定されたすべてのリソースバンドルをマージした後、ロケールに実際に表示されるプロパティを含む PropertiesHolder を取得します。getProperties(StringSE filename) 指定されたファイル名の PropertiesHolder を、キャッシュから、新たにロードして取得します。protected PropertiesSEloadProperties(Resource resource, StringSE filename) 指定されたリソースからプロパティをロードします。指定されたプロパティホルダーを 1 つのホルダーにマージします。protected PropertiesSEプレーンな新しいPropertiesSE インスタンスを作成するためのテンプレートメソッド。refreshProperties(StringSE filename, @Nullable ReloadableResourceBundleMessageSource.PropertiesHolder propHolder) 指定されたバンドルファイル名の PropertiesHolder をリフレッシュします。protected @Nullable MessageFormatSEresolveCode(StringSE code, LocaleSE locale) メッセージコードごとにキャッシュされた MessageFormat インスタンスを使用して、取得されたバンドルファイルのキーとして指定されたメッセージコードを解決します。resolveCodeWithoutArguments(StringSE code, LocaleSE locale) 取得されたバンドルファイルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま返します(MessageFormat 解析なし)。resolveResource(StringSE filename) 指定されたバンドルfilenameを具体的なResourceに解決し、複数のソースまたはファイル拡張子をチェックする可能性があります。voidsetConcurrentRefresh(boolean concurrentRefresh) 同時リフレッシュ動作を許可するかどうかを指定します。voidsetFileEncodings(PropertiesSE fileEncodings) プロパティファイルの解析に使用するファイルごとの文字セットを設定します。voidsetFileExtensions(ListSE<StringSE> fileExtensions) サポートされるファイル拡張子のリストを設定します。voidsetPropertiesPersister(@Nullable PropertiesPersister propertiesPersister) プロパティファイルの解析に使用する PropertiesPersister を設定します。voidsetResourceLoader(@Nullable ResourceLoader resourceLoader) バンドルプロパティファイルのロードに使用する ResourceLoader を設定します。toString()クラス AbstractResourceBasedMessageSource から継承されたメソッド
addBasenames, getBasenameSet, getCacheMillis, getDefaultEncoding, getDefaultLocale, isFallbackToSystemLocale, setBasename, setBasenames, setCacheMillis, setCacheSeconds, setDefaultEncoding, setDefaultLocale, setFallbackToSystemLocaleクラス AbstractMessageSource から継承されたメソッド
getCommonMessages, getDefaultMessage, getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setCommonMessages, setParentMessageSource, setUseCodeAsDefaultMessage
コンストラクターの詳細
ReloadableResourceBundleMessageSource
public ReloadableResourceBundleMessageSource()
メソッドの詳細
setFileExtensions
setFileEncodings
プロパティファイルの解析に使用するファイルごとの文字セットを設定します。クラシックプロパティファイルにのみ適用され、XML ファイルには適用されません。
- パラメーター:
fileEncodings- ファイル名をキーとし、文字セット名を値とするプロパティ。ファイル名は、オプションでロケール固有のコンポーネントを含むベース名の構文と一致する必要があります。たとえば、"WEB-INF/messages" または "WEB-INF/messages_en" などです。- 関連事項:
setConcurrentRefresh
public void setConcurrentRefresh(boolean concurrentRefresh) 同時リフレッシュ動作を許可するかどうかを指定します。つまり、特定のキャッシュされたプロパティファイルのリフレッシュ試行で 1 つのスレッドがロックされる一方で、リフレッシュ試行が完了するまで、他のスレッドはしばらくの間古いプロパティを返し続けます。デフォルトは "true" で、スレッド間の競合を最小限に抑えます。以前の動作、つまりリフレッシュ時に完全にブロックしたい場合は、このフラグを "false" に切り替えてください。
- 導入:
- 4.1
- 関連事項:
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)。マージされたプロパティは常に永久にキャッシュされます。
- 関連事項:
collectPropertiesToMerge
protected ListSE<ReloadableResourceBundleMessageSource.PropertiesHolder> collectPropertiesToMerge(LocaleSE locale) 指定されたベース名に基づいてマージするプロパティを決定します。- パラメーター:
locale- ロケール- 戻り値:
- 財産所有者のリスト
- 導入:
- 6.1.4
- 関連事項:
mergeProperties
protected ReloadableResourceBundleMessageSource.PropertiesHolder mergeProperties(ListSE<ReloadableResourceBundleMessageSource.PropertiesHolder> holders) 指定されたプロパティホルダーを 1 つのホルダーにマージします。- パラメーター:
holders- 財産所有者のリスト- 戻り値:
- 単一のマージされたプロパティホルダー
- 導入:
- 6.1.4
- 関連事項:
calculateAllFilenames
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- 関連事項:
resolveResource
指定されたバンドルfilenameを具体的なResourceに解決し、複数のソースまたはファイル拡張子をチェックする可能性があります。適切な具体的な
Resourceを解決できない場合、このメソッドはResourceを返し、それに対してResource.exists()はfalseを返しますが、これはその後無視されます。これを利用して、最終変更タイムスタンプを確認したり、代替ソースからプロパティをロードしたりできます。たとえば、データベース内の XML BLOB から、または JSON などのカスタム形式を使用して直列化されたプロパティから。
デフォルトの実装は、リソースの解決を構成済みの
ResourceLoaderに委譲し、setFileExtensions(List)によって定義された拡張機能 (デフォルトでは.propertiesおよび.xml) を持つ既存のResourceを順番にチェックします。このメソッドをオーバーライドする場合、
loadProperties(Resource, String)は、このメソッドによって返される任意の型のResourceからプロパティをロードできる必要があります。結果として、実装者にはloadProperties()もオーバーライドすることが強く推奨されます。このメソッドをオーバーライドする代わりに、このメソッドによって返されるすべてのリソースを処理できる
PropertiesPersisterを構成できます。ただし、デフォルトのloadProperties()実装では XML リソースに対してloadFromXmlを使用し、それ以外の場合は他の型のリソースに対して 2 つのloadメソッドを使用することに注意してください。- パラメーター:
filename- バンドルのファイル名 (ベース名 + ロケール)- 戻り値:
- 使用する
Resource、または見つからない場合はnull - 導入:
- 6.1
loadProperties
指定されたリソースからプロパティをロードします。- パラメーター:
resource- ロード元のリソースfilename- 元のバンドルファイル名 (ベース名 + ロケール)- 戻り値:
- 移入された Properties インスタンス
- 例外:
IOExceptionSE- プロパティの読み込みに失敗した場合
newProperties
プレーンな新しいPropertiesSE インスタンスを作成するためのテンプレートメソッド。デフォルトの実装では、単にProperties()を呼び出します。サブクラスでカスタム
PropertiesSE 拡張を返すことができます。オーバーライドするメソッドは、カスタムPropertiesSE サブクラスをインスタンス化するだけで、その時点でそれ以上の初期化やポピュレーションは実行されません。- 戻り値:
- プレーンプロパティインスタンス
- 導入:
- 4.2
clearCache
public void clearCache()リソースバンドルキャッシュをクリアします。その後の resolve 呼び出しは、プロパティファイルのリロードにつながります。clearCacheIncludingAncestors
public void clearCacheIncludingAncestors()この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。- 関連事項:
toString