クラス 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, 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
ResourceBundle
SE
ネストされたクラスのサマリー
修飾子と型クラス説明protected class
キャッシュ用の PropertiesHolder。フィールドサマリー
クラス org.springframework.context.support.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 PropertiesSE
loadProperties
(Resource resource, StringSE filename) 指定されたリソースからプロパティをロードします。指定されたプロパティホルダーを 1 つのホルダーにマージします。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 解析なし)。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
コンストラクターの詳細
ReloadableResourceBundleMessageSource
public ReloadableResourceBundleMessageSource()
メソッドの詳細
setFileExtensions
サポートされるファイル拡張子のリストを設定します。デフォルトは、
.properties
および.xml
を含むリストです。- パラメーター:
fileExtensions
- ファイル拡張子 (ドットで始まる)- 導入:
- 6.1
setFileEncodings
プロパティファイルの解析に使用するファイルごとの文字セットを設定します。クラシックプロパティファイルにのみ適用され、XML ファイルには適用されません。
- パラメーター:
fileEncodings
- ファイル名をキーとし、文字セット名を値とするプロパティ。ファイル名は、オプションでロケール固有のコンポーネントを含むベース名の構文と一致する必要があります。たとえば、"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)。マージされたプロパティは常に永久にキャッシュされます。
collectPropertiesToMerge
protected ListSE<ReloadableResourceBundleMessageSource.PropertiesHolder> collectPropertiesToMerge(LocaleSE locale) 指定されたベース名に基づいてマージするプロパティを決定します。mergeProperties
protected ReloadableResourceBundleMessageSource.PropertiesHolder mergeProperties(ListSE<ReloadableResourceBundleMessageSource.PropertiesHolder> holders) 指定されたプロパティホルダーを 1 つのホルダーにマージします。- パラメーター:
holders
- 財産所有者のリスト- 戻り値:
- 単一のマージされたプロパティホルダー
- 導入:
- 6.1.4
- 関連事項:
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- 関連事項:
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
プレーンな新しいProperties
SE インスタンスを作成するためのテンプレートメソッド。デフォルトの実装では、単にProperties()
を呼び出します。サブクラスでカスタム
Properties
SE 拡張を返すことができます。オーバーライドするメソッドは、カスタムProperties
SE サブクラスをインスタンス化するだけで、その時点でそれ以上の初期化やポピュレーションは実行されません。- 戻り値:
- プレーンプロパティインスタンス
- 導入:
- 4.2
clearCache
public void clearCache()リソースバンドルキャッシュをクリアします。その後の resolve 呼び出しは、プロパティファイルのリロードにつながります。clearCacheIncludingAncestors
public void clearCacheIncludingAncestors()この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。- 関連事項:
toString