public class ReloadableResourceBundleMessageSource extends AbstractResourceBasedMessageSource implements 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 に感謝します。
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), ResourcePropertiesPersister, DefaultResourceLoader, ResourceBundleMessageSource, ResourceBundleSE| 修飾子と型 | クラスと説明 |
|---|---|
protected class | ReloadableResourceBundleMessageSource.PropertiesHolder キャッシュ用の PropertiesHolder。 |
logger| コンストラクターと説明 |
|---|
ReloadableResourceBundleMessageSource() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected ListSE<StringSE> | calculateAllFilenames(StringSE basename, LocaleSE locale) 指定されたバンドルのベース名とロケールのすべてのファイル名を計算します。 |
protected ListSE<StringSE> | calculateFilenamesForLocale(StringSE basename, LocaleSE locale) 特定のバンドルのベース名とロケールのファイル名を計算し、言語コード、国コード、バリアントコードを追加します。 |
void | clearCache() リソースバンドルキャッシュをクリアします。 |
void | clearCacheIncludingAncestors() この MessageSource とそのすべての祖先のリソースバンドルキャッシュをクリアします。 |
protected ReloadableResourceBundleMessageSource.PropertiesHolder | getMergedProperties(LocaleSE locale) 指定されたすべてのリソースバンドルをマージした後、ロケールに実際に表示されるプロパティを含む PropertiesHolder を取得します。 |
protected ReloadableResourceBundleMessageSource.PropertiesHolder | getProperties(StringSE filename) 指定されたファイル名の PropertiesHolder を、キャッシュから、新たにロードして取得します。 |
protected PropertiesSE | loadProperties(Resource resource, StringSE filename) 指定されたリソースからプロパティをロードします。 |
protected PropertiesSE | newProperties() プレーンな新しい PropertiesSE インスタンスを作成するためのテンプレートメソッド。 |
protected ReloadableResourceBundleMessageSource.PropertiesHolder | 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 を設定します。 |
StringSE | toString() |
addBasenames, getBasenameSet, getCacheMillis, getDefaultEncoding, getDefaultLocale, isFallbackToSystemLocale, setBasename, setBasenames, setCacheMillis, setCacheSeconds, setDefaultEncoding, setDefaultLocale, setFallbackToSystemLocalegetCommonMessages, getDefaultMessage, getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setCommonMessages, setParentMessageSource, setUseCodeAsDefaultMessagecreateMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormatcloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSEpublic void setFileEncodings(PropertiesSE fileEncodings)
クラシックプロパティファイルにのみ適用され、XML ファイルには適用されません。
fileEncodings - ファイル名をキー、文字セット名を値とするプロパティ。ファイル名は、オプションのロケール固有のコンポーネントを使用して、basename 構文と一致する必要があります。"WEB-INF/messages" または "WEB-INF/messages_en"。AbstractResourceBasedMessageSource.setBasenames(java.lang.String...), PropertiesPersister.load(java.util.Properties, java.io.InputStream)public void setConcurrentRefresh(boolean concurrentRefresh)
デフォルトは「true」: この動作は Spring Framework 4.1 から新しくなり、スレッド間の競合を最小限に抑えています。以前の動作、つまりリフレッシュ時に完全にブロックする場合は、このフラグを "false" に切り替えます。
public void setPropertiesPersister(@Nullable PropertiesPersister propertiesPersister)
デフォルトは ResourcePropertiesPersister です。
public void setResourceLoader(@Nullable ResourceLoader resourceLoader)
デフォルトは DefaultResourceLoader です。ResourceLoaderAware インターフェースを実装しているため、コンテキストで実行している場合、ApplicationContext によってオーバーライドされます。ApplicationContext の外部で実行している場合は、手動でオーバーライドできます。
ResourceLoaderAware の setResourceLoader resourceLoader - このオブジェクトによって使用される ResourceLoader オブジェクト DefaultResourceLoader, ResourceLoaderAwareprotected StringSE resolveCodeWithoutArguments(StringSE code, LocaleSE locale)
AbstractMessageSource の resolveCodeWithoutArguments code - 解決するメッセージのコード locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null AbstractMessageSource.resolveCode(java.lang.String, java.util.Locale), MessageFormatSE@Nullable protected MessageFormatSE resolveCode(StringSE code, LocaleSE locale)
AbstractMessageSource の resolveCode code - 解決するメッセージのコード locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null AbstractMessageSource.resolveCodeWithoutArguments(String, java.util.Locale)protected ReloadableResourceBundleMessageSource.PropertiesHolder getMergedProperties(LocaleSE locale)
リソースバンドルの内容を永久にキャッシュする場合にのみ使用されます (つまり、cacheSeconds < 0)。マージされたプロパティは常に永久にキャッシュされます。
protected ListSE<StringSE> calculateAllFilenames(StringSE basename, LocaleSE locale)
basename - バンドルのベース名 locale - ロケール AbstractResourceBasedMessageSource.setFallbackToSystemLocale(boolean), calculateFilenamesForLocale(java.lang.String, java.util.Locale)protected ListSE<StringSE> calculateFilenamesForLocale(StringSE basename, LocaleSE locale)
例: basename "messages"、Locale "de_AT_oo" → "messages_de_AT_OO"、"messages_de_AT"、"messages_de"。
Locale.toString()SE で定義されたルールに従います。
basename - バンドルのベース名 locale - ロケール protected ReloadableResourceBundleMessageSource.PropertiesHolder getProperties(StringSE filename)
filename - バンドルのファイル名 (ベース名 + ロケール)protected ReloadableResourceBundleMessageSource.PropertiesHolder refreshProperties(StringSE filename, @Nullable ReloadableResourceBundleMessageSource.PropertiesHolder propHolder)
以前にキャッシュされていない場合、ホルダーは null、またはタイムアウトしたキャッシュエントリ (現在の最終変更タイムスタンプに対して再検証される可能性があります) である可能性があります。
filename - バンドルのファイル名 (ベース名 + ロケール)propHolder - バンドルの現在の PropertiesHolderprotected PropertiesSE loadProperties(Resource resource, StringSE filename) throws IOExceptionSE
resource - ロード元のリソース filename - 元のバンドルファイル名 (ベース名 + ロケール)IOExceptionSE - プロパティの読み込みに失敗した場合 protected PropertiesSE newProperties()
PropertiesSE インスタンスを作成するためのテンプレートメソッド。デフォルトの実装では、単に Properties()SE を呼び出します。 サブクラスでカスタム PropertiesSE 拡張を返すことができます。オーバーライドするメソッドは、カスタム PropertiesSE サブクラスをインスタンス化するだけで、その時点でそれ以上の初期化やポピュレーションは実行されません。
public void clearCache()
public void clearCacheIncludingAncestors()
clearCache()public StringSE toString()
ObjectSE の toStringSE