Class ResourceBundleMessageSource
- All Implemented Interfaces:
- Aware,- BeanClassLoaderAware,- HierarchicalMessageSource,- MessageSource
MessageSource implementation that
 accesses resource bundles using specified basenames. This class relies
 on the underlying JDK's ResourceBundle implementation,
 in combination with the JDK's standard message parsing provided by
 MessageFormat.
 This MessageSource caches both the accessed ResourceBundle instances and
 the generated MessageFormats for each message. It also implements rendering of
 no-arg messages without MessageFormat, as supported by the AbstractMessageSource
 base class. The caching provided by this MessageSource is significantly faster
 than the built-in caching of the java.util.ResourceBundle class.
 
The basenames follow ResourceBundle conventions: essentially,
 a fully-qualified classpath location. If it doesn't contain a package qualifier
 (such as org.mypackage), it will be resolved from the classpath root.
 Note that the JDK's standard ResourceBundle treats dots as package separators:
 This means that "test.theme" is effectively equivalent to "test/theme".
 
On the classpath, bundle resources will be read with the locally configured
 encoding: by default, ISO-8859-1; consider switching
 this to UTF-8, or to null for the platform default encoding. On the JDK 9+
 module path where locally provided ResourceBundle.Control handles are not
 supported, this MessageSource always falls back to ResourceBundle.getBundle(java.lang.String)
 retrieval with the platform default encoding: UTF-8 with a ISO-8859-1 fallback on
 JDK 9+ (configurable through the "java.util.PropertyResourceBundle.encoding" system
 property). Note that loadBundle(Reader)/loadBundle(InputStream)
 won't be called in this case either, effectively ignoring overrides in subclasses.
 Consider implementing a JDK 9 java.util.spi.ResourceBundleProvider instead.
- Author:
- Rod Johnson, Juergen Hoeller, Qimiao Chen
- See Also:
- 
Field SummaryFields inherited from class org.springframework.context.support.MessageSourceSupportlogger
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected ResourceBundledoGetBundle(String basename, Locale locale) Obtain the resource bundle for the given basename and Locale.protected @Nullable ClassLoaderReturn the ClassLoader to load resource bundles with.protected @Nullable MessageFormatgetMessageFormat(ResourceBundle bundle, String code, Locale locale) Return a MessageFormat for the given bundle and code, fetching already generated MessageFormats from the cache.protected @Nullable ResourceBundlegetResourceBundle(String basename, Locale locale) Return a ResourceBundle for the given basename and Locale, fetching already generated ResourceBundle from the cache.getStringOrNull(ResourceBundle bundle, String key) Efficiently retrieve the String value for the specified key, or returnnullif not found.protected ResourceBundleloadBundle(InputStream inputStream) Load a property-based resource bundle from the given input stream, picking up the default properties encoding on JDK 9+.protected ResourceBundleloadBundle(Reader reader) Load a property-based resource bundle from the given reader.protected @Nullable MessageFormatresolveCode(String code, Locale locale) Resolves the given message code as key in the registered resource bundles, using a cached MessageFormat instance per message code.resolveCodeWithoutArguments(String code, Locale locale) Resolves the given message code as key in the registered resource bundles, returning the value found in the bundle as-is (without MessageFormat parsing).voidsetBeanClassLoader(ClassLoader classLoader) Callback that supplies the beanclass loaderto a bean instance.voidsetBundleClassLoader(ClassLoader classLoader) Set the ClassLoader to load resource bundles with.toString()Show the configuration of this MessageSource.Methods inherited from class org.springframework.context.support.AbstractResourceBasedMessageSourceaddBasenames, getBasenameSet, getCacheMillis, getDefaultEncoding, getDefaultLocale, isFallbackToSystemLocale, setBasename, setBasenames, setCacheMillis, setCacheSeconds, setDefaultEncoding, setDefaultLocale, setFallbackToSystemLocaleMethods inherited from class org.springframework.context.support.AbstractMessageSourcegetCommonMessages, getDefaultMessage, getDefaultMessage, getMessage, getMessage, getMessage, getMessageFromParent, getMessageInternal, getParentMessageSource, isUseCodeAsDefaultMessage, resolveArguments, setCommonMessages, setParentMessageSource, setUseCodeAsDefaultMessageMethods inherited from class org.springframework.context.support.MessageSourceSupportcreateMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormat
- 
Constructor Details- 
ResourceBundleMessageSourcepublic ResourceBundleMessageSource()
 
- 
- 
Method Details- 
setBundleClassLoaderSet the ClassLoader to load resource bundles with.Default is the containing BeanFactory's bean ClassLoader, or the default ClassLoader determined byClassUtils.getDefaultClassLoader()if not running within a BeanFactory.
- 
getBundleClassLoaderReturn the ClassLoader to load resource bundles with.Default is the containing BeanFactory's bean ClassLoader. 
- 
setBeanClassLoaderDescription copied from interface:BeanClassLoaderAwareCallback that supplies the beanclass loaderto a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as InitializingBean'sInitializingBean.afterPropertiesSet()method or a custom init-method.- Specified by:
- setBeanClassLoaderin interface- BeanClassLoaderAware
- Parameters:
- classLoader- the owning class loader
 
- 
resolveCodeWithoutArgumentsResolves the given message code as key in the registered resource bundles, returning the value found in the bundle as-is (without MessageFormat parsing).- Overrides:
- resolveCodeWithoutArgumentsin class- AbstractMessageSource
- Parameters:
- code- the code of the message to resolve
- locale- the locale to resolve the code for (subclasses are encouraged to support internationalization)
- Returns:
- the message String, or nullif not found
- See Also:
 
- 
resolveCodeResolves the given message code as key in the registered resource bundles, using a cached MessageFormat instance per message code.- Specified by:
- resolveCodein class- AbstractMessageSource
- Parameters:
- code- the code of the message to resolve
- locale- the locale to resolve the code for (subclasses are encouraged to support internationalization)
- Returns:
- the MessageFormat for the message, or nullif not found
- See Also:
 
- 
getResourceBundleReturn a ResourceBundle for the given basename and Locale, fetching already generated ResourceBundle from the cache.- Parameters:
- basename- the basename of the ResourceBundle
- locale- the Locale to find the ResourceBundle for
- Returns:
- the resulting ResourceBundle, or nullif none found for the given basename and Locale
 
- 
doGetBundleprotected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException Obtain the resource bundle for the given basename and Locale.- Parameters:
- basename- the basename to look for
- locale- the Locale to look for
- Returns:
- the corresponding ResourceBundle
- Throws:
- MissingResourceException- if no matching bundle could be found
- See Also:
 
- 
loadBundleLoad a property-based resource bundle from the given reader.This will be called in case of a "defaultEncoding", includingResourceBundleMessageSource's default ISO-8859-1 encoding. Note that this method can only be called with aResourceBundle.Control: When running on the JDK 9+ module path where such control handles are not supported, any overrides in custom subclasses will effectively get ignored.The default implementation returns a PropertyResourceBundle.- Parameters:
- reader- the reader for the target resource
- Returns:
- the fully loaded bundle
- Throws:
- IOException- in case of I/O failure
- Since:
- 4.2
- See Also:
 
- 
loadBundleLoad a property-based resource bundle from the given input stream, picking up the default properties encoding on JDK 9+.This will only be called with "defaultEncoding"set tonull, explicitly enforcing the platform default encoding (which is UTF-8 with a ISO-8859-1 fallback on JDK 9+ but configurable through the "java.util.PropertyResourceBundle.encoding" system property). Note that this method can only be called with aResourceBundle.Control: When running on the JDK 9+ module path where such control handles are not supported, any overrides in custom subclasses will effectively get ignored.The default implementation returns a PropertyResourceBundle.- Parameters:
- inputStream- the input stream for the target resource
- Returns:
- the fully loaded bundle
- Throws:
- IOException- in case of I/O failure
- Since:
- 5.1
- See Also:
 
- 
getMessageFormatprotected @Nullable MessageFormat getMessageFormat(ResourceBundle bundle, String code, Locale locale) throws MissingResourceException Return a MessageFormat for the given bundle and code, fetching already generated MessageFormats from the cache.- Parameters:
- bundle- the ResourceBundle to work on
- code- the message code to retrieve
- locale- the Locale to use to build the MessageFormat
- Returns:
- the resulting MessageFormat, or nullif no message defined for the given code
- Throws:
- MissingResourceException- if thrown by the ResourceBundle
 
- 
getStringOrNullEfficiently retrieve the String value for the specified key, or returnnullif not found.As of 4.2, the default implementation checks containsKeybefore it attempts to callgetString(which would require catchingMissingResourceExceptionfor key not found).Can be overridden in subclasses. - Parameters:
- bundle- the ResourceBundle to perform the lookup in
- key- the key to look up
- Returns:
- the associated value, or nullif none
- Since:
- 4.2
- See Also:
 
- 
toStringShow the configuration of this MessageSource.
 
-