クラス 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
- 関連事項:
- 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
- ResourceBundleSE
 
- ネストされたクラスの要約ネストされたクラス修飾子と型クラス説明- 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プレーンな新しい- PropertiesSE インスタンスを作成するためのテンプレートメソッド。- refreshProperties- (StringSE filename, ReloadableResourceBundleMessageSource.PropertiesHolder propHolder) 指定されたバンドルファイル名の PropertiesHolder をリフレッシュします。- protected MessageFormatSE- resolveCode- (StringSE code, LocaleSE locale) メッセージコードごとにキャッシュされた MessageFormat インスタンスを使用して、取得されたバンドルファイルのキーとして指定されたメッセージコードを解決します。- protected StringSE- resolveCodeWithoutArguments- (StringSE code, LocaleSE locale) 取得されたバンドルファイルのキーとして指定されたメッセージコードを解決し、バンドルで見つかった値をそのまま返します(MessageFormat 解析なし)。- protected Resource- resolveResource- (StringSE filename) 指定されたバンドル- filenameを具体的な- Resourceに解決し、複数のソースまたはファイル拡張子をチェックする可能性があります。- void- setConcurrentRefresh- (boolean concurrentRefresh) 同時リフレッシュ動作を許可するかどうかを指定します。- void- setFileEncodings- (PropertiesSE fileEncodings) プロパティファイルの解析に使用するファイルごとの文字セットを設定します。- void- setFileExtensions- (ListSE<StringSE> fileExtensions) サポートされるファイル拡張子のリストを設定します。- 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
- コンストラクターの詳細- ReloadableResourceBundleMessageSourcepublic ReloadableResourceBundleMessageSource()
 
- メソッドの詳細- setFileExtensionsサポートされるファイル拡張子のリストを設定します。- デフォルトは、 - .propertiesおよび- .xmlを含むリストです。- パラメーター:
- fileExtensions- ファイル拡張子 (ドットで始まる)
- 導入:
- 6.1
 
- setFileEncodingsプロパティファイルの解析に使用するファイルごとの文字セットを設定します。- クラシックプロパティファイルにのみ適用され、XML ファイルには適用されません。 - パラメーター:
- fileEncodings- ファイル名をキー、文字セット名を値とするプロパティ。ファイル名は、オプションのロケール固有のコンポーネントを使用して、basename 構文と一致する必要があります。"WEB-INF/messages" または "WEB-INF/messages_en"。
- 関連事項:
 
- setConcurrentRefreshpublic 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
- 関連事項:
 
- getMergedPropertiesprotected 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
 
- refreshPropertiesprotected 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
- 導入:
- 6.1
 
- loadProperties指定されたリソースからプロパティをロードします。- パラメーター:
- resource- ロード元のリソース
- filename- 元のバンドルファイル名 (ベース名 + ロケール)
- 戻り値:
- 移入された Properties インスタンス
- 例外:
- IOExceptionSE- プロパティの読み込みに失敗した場合
 
- newPropertiesプレーンな新しい- PropertiesSE インスタンスを作成するためのテンプレートメソッド。デフォルトの実装では、単に- Properties()を呼び出します。- サブクラスでカスタム - PropertiesSE 拡張を返すことができます。オーバーライドするメソッドは、カスタム- PropertiesSE サブクラスをインスタンス化するだけで、その時点でそれ以上の初期化やポピュレーションは実行されません。- 戻り値:
- プレーンプロパティインスタンス
- 導入:
- 4.2
 
- clearCachepublic void clearCache()リソースバンドルキャッシュをクリアします。その後の resolve 呼び出しは、プロパティファイルのリロードにつながります。
- clearCacheIncludingAncestorspublic void clearCacheIncludingAncestors()この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。- 関連事項:
 
- toString