|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.context.support.AbstractMessageSource org.springframework.context.support.ReloadableResourceBundleMessageSource
MessageSource that accesses the ResourceBundles with the specified basenames. This class uses java.util.Properties instances as its internal data structure for messages, loading them via a PropertiesPersister strategy: The default strategy can load properties files with a specific charset.
In contrast to ResourceBundleMessageSource, this class supports reloading of properties files through the "cacheSeconds" setting, and also through programmatically clearing the properties cache. Since application servers do typically cache all files loaded from the classpath, it is necessary to store resources somewhere else (for example, in the "WEB-INF" directory of a web app). Otherwise changes of files in the classpath are not reflected in the application.
Note that the "basename" respectively "basenames" property has a different convention here: It follows the basic ResourceBundle rule of not specifying file extension or language codes, but can refer to any Spring resource location (instead of being restricted to classpath resources). With a "classpath:" prefix, resources can still be loaded from the classpath, but "cacheSeconds" values other than "-1" (caching forever) will not work in this case.
This MessageSource can easily be used outside an ApplicationContext: It uses a DefaultResourceLoader as default, getting overridden with the ApplicationContext if running in a context. It does not have any other specific dependencies.
setCacheSeconds(int)
,
setBasenames(java.lang.String[])
,
setDefaultEncoding(java.lang.String)
,
setFileEncodings(java.util.Properties)
,
setPropertiesPersister(org.springframework.util.PropertiesPersister)
,
setResourceLoader(org.springframework.core.io.ResourceLoader)
,
DefaultPropertiesPersister
,
DefaultResourceLoader
,
ResourceBundleMessageSource
,
ResourceBundle
Nested Class Summary | |
protected static class |
ReloadableResourceBundleMessageSource.PropertiesHolder
PropertiesHolder for caching. |
Field Summary | |
static java.lang.String |
PROPERTIES_SUFFIX
|
Fields inherited from class org.springframework.context.support.AbstractMessageSource |
logger |
Constructor Summary | |
ReloadableResourceBundleMessageSource()
|
Method Summary | |
protected java.util.List |
calculateAllFilenames(java.lang.String basename,
java.util.Locale locale)
Calculate all filenames for the given bundle basename and Locale. |
protected java.util.List |
calculateFilenamesForLocale(java.lang.String basename,
java.util.Locale locale)
Calculate the filenames for the given bundle basename and Locale, appending language code, country code, and variant code. |
void |
clearCache()
Clear the resource bundle cache. |
void |
clearCacheIncludingAncestors()
Clear the resource bundle caches of this MessageSource and all its ancestors. |
protected ReloadableResourceBundleMessageSource.PropertiesHolder |
getProperties(java.lang.String filename)
Get PropertiesHolder for the given filename, either from the cache or freshly loaded. |
protected ReloadableResourceBundleMessageSource.PropertiesHolder |
refreshProperties(java.lang.String filename,
ReloadableResourceBundleMessageSource.PropertiesHolder propHolder)
Refresh the PropertiesHolder for the given bundle filename. |
protected java.text.MessageFormat |
resolveCode(java.lang.String code,
java.util.Locale locale)
Subclasses must implement this method to resolve a message. |
void |
setBasename(java.lang.String basename)
Set a single basename, following the basic ResourceBundle convention of not specifying file extension or language codes, but in contrast to ResourceBundleMessageSource referring to a Spring resource location: e.g. |
void |
setBasenames(java.lang.String[] basenames)
Set an array of basenames, each following the above-mentioned special convention. |
void |
setCacheSeconds(int cacheSeconds)
Set the number of seconds to cache loaded properties files. |
void |
setDefaultEncoding(java.lang.String defaultEncoding)
Set the default charset to use for parsing properties files. |
void |
setFallbackToSystemLocale(boolean fallbackToSystemLocale)
Set whether to fall back to the system Locale if no files for a specific Locale have been found. |
void |
setFileEncodings(java.util.Properties fileEncodings)
Set per-file charsets to use for parsing properties files. |
void |
setPropertiesPersister(PropertiesPersister propertiesPersister)
Set the PropertiesPersister to use for parsing properties files. |
void |
setResourceLoader(ResourceLoader resourceLoader)
Set the ResourceLoader to use for loading bundle properties files. |
java.lang.String |
toString()
|
Methods inherited from class org.springframework.context.support.AbstractMessageSource |
getMessage, getMessage, getMessage, getMessageInternal, getParentMessageSource, setParentMessageSource, setUseCodeAsDefaultMessage |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final java.lang.String PROPERTIES_SUFFIX
Constructor Detail |
public ReloadableResourceBundleMessageSource()
Method Detail |
public void setBasename(java.lang.String basename)
basename
- the single basenamesetBasenames(java.lang.String[])
,
ResourceEditor
,
ResourceBundle
public void setBasenames(java.lang.String[] basenames)
Note that message definitions in a previous resource bundle will override ones in a later bundle, due to the sequential lookup.
basenames
- an array of basenamessetBasename(java.lang.String)
,
ResourceBundle
public void setDefaultEncoding(java.lang.String defaultEncoding)
Default is none, using java.util.Properties' default charset.
setFileEncodings(java.util.Properties)
,
PropertiesPersister.load(java.util.Properties, java.io.InputStream)
public void setFileEncodings(java.util.Properties fileEncodings)
fileEncodings
- Properties with filenames as keys and charset
names as values. Filenames have to match the basename syntax,
with optional locale-specific appendices: e.g. "WEB-INF/messages"
or "WEB-INF/messages_en".setBasenames(java.lang.String[])
,
PropertiesPersister.load(java.util.Properties, java.io.InputStream)
public void setFallbackToSystemLocale(boolean fallbackToSystemLocale)
Falling back to the system Locale is the default behavior of java.util.ResourceBundle. However, this is often not desirable in an application server environment, where the system Locale is not relevant to the application at all: Set this flag to "false" in such a scenario.
public void setCacheSeconds(int cacheSeconds)
public void setPropertiesPersister(PropertiesPersister propertiesPersister)
DefaultPropertiesPersister
public void setResourceLoader(ResourceLoader resourceLoader)
setResourceLoader
in interface ResourceLoaderAware
resourceLoader
- ResourceLoader object to be used by this objectDefaultResourceLoader
protected java.text.MessageFormat resolveCode(java.lang.String code, java.util.Locale locale)
AbstractMessageSource
Returns a MessageFormat instance rather than a message String, to allow for appropriate caching of MessageFormats in subclasses.
resolveCode
in class AbstractMessageSource
code
- the code of the message to resolvelocale
- the Locale to resolve the code for
(subclasses are encouraged to support internationalization)
protected java.util.List calculateAllFilenames(java.lang.String basename, java.util.Locale locale)
basename
- the basename of the bundlelocale
- the locale
setFallbackToSystemLocale(boolean)
,
calculateFilenamesForLocale(java.lang.String, java.util.Locale)
protected java.util.List calculateFilenamesForLocale(java.lang.String basename, java.util.Locale locale)
basename
- the basename of the bundlelocale
- the locale
protected ReloadableResourceBundleMessageSource.PropertiesHolder getProperties(java.lang.String filename)
protected ReloadableResourceBundleMessageSource.PropertiesHolder refreshProperties(java.lang.String filename, ReloadableResourceBundleMessageSource.PropertiesHolder propHolder)
public void clearCache()
public void clearCacheIncludingAncestors()
clearCache()
public java.lang.String toString()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |