diff --git a/spring-context/src/main/java/org/springframework/context/MessageSource.java b/spring-context/src/main/java/org/springframework/context/MessageSource.java
index 6396a016bb..fb17668689 100644
--- a/spring-context/src/main/java/org/springframework/context/MessageSource.java
+++ b/spring-context/src/main/java/org/springframework/context/MessageSource.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2017 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@ import org.springframework.lang.Nullable;
*
*
Spring provides two out-of-the-box implementations for production:
*
- * - {@link org.springframework.context.support.ResourceBundleMessageSource},
- * built on top of the standard {@link java.util.ResourceBundle}
- *
- {@link org.springframework.context.support.ReloadableResourceBundleMessageSource},
- * being able to reload message definitions without restarting the VM
+ *
- {@link org.springframework.context.support.ResourceBundleMessageSource}: built
+ * on top of the standard {@link java.util.ResourceBundle}, sharing its limitations.
+ *
- {@link org.springframework.context.support.ReloadableResourceBundleMessageSource}:
+ * highly configurable, in particular with respect to reloading message definitions.
*
*
* @author Rod Johnson
@@ -41,16 +41,17 @@ public interface MessageSource {
/**
* Try to resolve the message. Return default message if no message was found.
- * @param code the code to lookup up, such as 'calculator.noRateSet'. Users of
- * this class are encouraged to base message names on the relevant fully
- * qualified class name, thus avoiding conflict and ensuring maximum clarity.
+ * @param code the code to lookup up, e.g. 'calculator.noRateSet'.
+ * MessageSource users are encouraged to base message names on qualified class
+ * or package names, avoiding potential conflicts and ensuring maximum clarity.
* @param args an array of arguments that will be filled in for params within
* the message (params look like "{0}", "{1,date}", "{2,time}" within a message),
- * or {@code null} if none.
+ * or {@code null} if none
* @param defaultMessage a default message to return if the lookup fails
* @param locale the locale in which to do the lookup
- * @return the resolved message if the lookup was successful;
- * otherwise the default message passed as a parameter
+ * @return the resolved message if the lookup was successful, otherwise
+ * the default message passed as a parameter (which may be {@code null})
+ * @see #getMessage(MessageSourceResolvable, Locale)
* @see java.text.MessageFormat
*/
@Nullable
@@ -58,13 +59,16 @@ public interface MessageSource {
/**
* Try to resolve the message. Treat as an error if the message can't be found.
- * @param code the code to lookup up, such as 'calculator.noRateSet'
+ * @param code the code to lookup up, e.g. 'calculator.noRateSet'.
+ * MessageSource users are encouraged to base message names on qualified class
+ * or package names, avoiding potential conflicts and ensuring maximum clarity.
* @param args an array of arguments that will be filled in for params within
* the message (params look like "{0}", "{1,date}", "{2,time}" within a message),
- * or {@code null} if none.
+ * or {@code null} if none
* @param locale the locale in which to do the lookup
- * @return the resolved message
- * @throws NoSuchMessageException if the message wasn't found
+ * @return the resolved message (never {@code null})
+ * @throws NoSuchMessageException if no corresponding message was found
+ * @see #getMessage(MessageSourceResolvable, Locale)
* @see java.text.MessageFormat
*/
String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
@@ -76,9 +80,15 @@ public interface MessageSource {
* since at the time of calling this method we aren't able to determine if the
* {@code defaultMessage} property of the resolvable is {@code null} or not.
* @param resolvable the value object storing attributes required to resolve a message
+ * (may include a default message)
* @param locale the locale in which to do the lookup
- * @return the resolved message
- * @throws NoSuchMessageException if the message wasn't found
+ * @return the resolved message (never {@code null} since even a
+ * {@code MessageSourceResolvable}-provided default message needs to be non-null)
+ * @throws NoSuchMessageException if no corresponding message was found
+ * (and no default message was provided by the {@code MessageSourceResolvable})
+ * @see MessageSourceResolvable#getCodes()
+ * @see MessageSourceResolvable#getArguments()
+ * @see MessageSourceResolvable#getDefaultMessage()
* @see java.text.MessageFormat
*/
String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;