org.springframework.context.support

## 类 AbstractMessageSource

- java.lang.Object
- - org.springframework.context.support.MessageSourceSupport
  - - org.springframework.context.support.AbstractMessageSource

- 所有已实现的接口:
    HierarchicalMessageSource, MessageSource
  直接已知子类:
    AbstractResourceBasedMessageSource, StaticMessageSource

      public abstract class AbstractMessageSource
      extends MessageSourceSupport
      implements HierarchicalMessageSource

  Abstract implementation of the `HierarchicalMessageSource` interface, implementing common handling of message variants, making it easy to implement a specific strategy for a concrete MessageSource.

  Subclasses must implement the abstract `resolveCode(java.lang.String, java.util.Locale)` method. For efficient resolution of messages without arguments, the `resolveCodeWithoutArguments(java.lang.String, java.util.Locale)` method should be overridden as well, resolving messages without a MessageFormat being involved.

  Note: By default, message texts are only parsed through MessageFormat if arguments have been passed in for the message. In case of no arguments, message texts will be returned as-is. As a consequence, you should only use MessageFormat escaping for messages with actual arguments, and keep all other messages unescaped. If you prefer to escape all messages, set the "alwaysUseMessageFormat" flag to "true".

  Supports not only MessageSourceResolvables as primary messages but also resolution of message arguments that are in turn MessageSourceResolvables themselves.

  This class does not implement caching of messages per code, thus subclasses can dynamically change messages over time. Subclasses are encouraged to cache their messages in a modification-aware fashion, allowing for hot deployment of updated messages.

  作者:
    Juergen Hoeller, Rod Johnson
  另请参阅:
    `resolveCode(String, java.util.Locale)`, `resolveCodeWithoutArguments(String, java.util.Locale)`, `MessageSourceSupport.setAlwaysUseMessageFormat(boolean)`, `MessageFormat`

- - ### 字段概要

    - ### 从类继承的字段 org.springframework.context.support.MessageSourceSupport

      `logger`

  - ### 构造器概要

    构造器
    构造器和说明
    `AbstractMessageSource()`

  - ### 方法概要

    所有方法 实例方法 抽象方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected Properties` | `getCommonMessages()` Return a Properties object defining locale-independent common messages, if any.
    `protected String` | `getDefaultMessage(MessageSourceResolvable resolvable, Locale locale)` Get a default message for the given `MessageSourceResolvable`.
    `protected String` | `getDefaultMessage(String code)` Return a fallback default message for the given code, if any.
    `String` | `getMessage(MessageSourceResolvable resolvable, Locale locale)` Try to resolve the message using all the attributes contained within the `MessageSourceResolvable` argument that was passed in.
    `String` | `getMessage(String code, Object[] args, Locale locale)` Try to resolve the message.
    `String` | `getMessage(String code, Object[] args, String defaultMessage, Locale locale)` Try to resolve the message.
    `protected String` | `getMessageFromParent(String code, Object[] args, Locale locale)` Try to retrieve the given message from the parent `MessageSource`, if any.
    `protected String` | `getMessageInternal(String code, Object[] args, Locale locale)` Resolve the given code and arguments as message in the given Locale, returning `null` if not found.
    `MessageSource` | `getParentMessageSource()` Return the parent of this MessageSource, or `null` if none.
    `protected boolean` | `isUseCodeAsDefaultMessage()` Return whether to use the message code as default message instead of throwing a NoSuchMessageException.
    `protected Object[]` | `resolveArguments(Object[] args, Locale locale)` Searches through the given array of objects, finds any MessageSourceResolvable objects and resolves them.
    `protected abstract MessageFormat` | `resolveCode(String code, Locale locale)` Subclasses must implement this method to resolve a message.
    `protected String` | `resolveCodeWithoutArguments(String code, Locale locale)` Subclasses can override this method to resolve a message without arguments in an optimized fashion, i.e. to resolve without involving a MessageFormat.
    `void` | `setCommonMessages(Properties commonMessages)` Specify locale-independent common messages, with the message code as key and the full message String (may contain argument placeholders) as value.
    `void` | `setParentMessageSource(MessageSource parent)` Set the parent that will be used to try to resolve messages that this object can't resolve.
    `void` | `setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)` Set whether to use the message code as default message instead of throwing a NoSuchMessageException.

    - ### 从类继承的方法 org.springframework.context.support.MessageSourceSupport

      `createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormat`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 构造器详细资料

    - #### AbstractMessageSource

          public AbstractMessageSource()

  - ### 方法详细资料

    - #### setParentMessageSource

          public void setParentMessageSource(@Nullable
                                             MessageSource parent)

      从接口复制的说明: `HierarchicalMessageSource`
      Set the parent that will be used to try to resolve messages that this object can't resolve.
      指定者:
        `setParentMessageSource` 在接口中 `HierarchicalMessageSource`
      参数:
        `parent` - the parent MessageSource that will be used to resolve messages that this object can't resolve. May be `null`, in which case no further resolution is possible.

    - #### getParentMessageSource

          @Nullable
          public MessageSource getParentMessageSource()

      从接口复制的说明: `HierarchicalMessageSource`
      Return the parent of this MessageSource, or `null` if none.
      指定者:
        `getParentMessageSource` 在接口中 `HierarchicalMessageSource`

    - #### setCommonMessages

          public void setCommonMessages(@Nullable
                                        Properties commonMessages)

      Specify locale-independent common messages, with the message code as key and the full message String (may contain argument placeholders) as value.

      May also link to an externally defined Properties object, e.g. defined through a `PropertiesFactoryBean`.

    - #### getCommonMessages

          @Nullable
          protected Properties getCommonMessages()

      Return a Properties object defining locale-independent common messages, if any.

    - #### setUseCodeAsDefaultMessage

          public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)

      Set whether to use the message code as default message instead of throwing a NoSuchMessageException. Useful for development and debugging. Default is "false".

      Note: In case of a MessageSourceResolvable with multiple codes (like a FieldError) and a MessageSource that has a parent MessageSource, do not activate "useCodeAsDefaultMessage" in the parent: Else, you'll get the first code returned as message by the parent, without attempts to check further codes.

      To be able to work with "useCodeAsDefaultMessage" turned on in the parent, AbstractMessageSource and AbstractApplicationContext contain special checks to delegate to the internal `getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale)` method if available. In general, it is recommended to just use "useCodeAsDefaultMessage" during development and not rely on it in production in the first place, though.

      另请参阅:
        `getMessage(String, Object[], Locale)`, `FieldError`

    - #### isUseCodeAsDefaultMessage

          protected boolean isUseCodeAsDefaultMessage()

      Return whether to use the message code as default message instead of throwing a NoSuchMessageException. Useful for development and debugging. Default is "false".

      Alternatively, consider overriding the `getDefaultMessage(org.springframework.context.MessageSourceResolvable, java.util.Locale)` method to return a custom fallback message for an unresolvable code.

      另请参阅:
        `getDefaultMessage(String)`

    - #### getMessage

          public final String getMessage(String code,
                                         @Nullable
                                         Object[] args,
                                         @Nullable
                                         String defaultMessage,
                                         Locale locale)

      从接口复制的说明: `MessageSource`
      Try to resolve the message. Return default message if no message was found.
      指定者:
        `getMessage` 在接口中 `MessageSource`
      参数:
        `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.
        `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 `null` if none.
        `defaultMessage` - a default message to return if the lookup fails
        `locale` - the locale in which to do the lookup
      返回:
        the resolved message if the lookup was successful; otherwise the default message passed as a parameter
      另请参阅:
        `MessageFormat`

    - #### getMessage

          public final String getMessage(String code,
                                         @Nullable
                                         Object[] args,
                                         Locale locale)
                                  throws NoSuchMessageException

      从接口复制的说明: `MessageSource`
      Try to resolve the message. Treat as an error if the message can't be found.
      指定者:
        `getMessage` 在接口中 `MessageSource`
      参数:
        `code` - the code to lookup up, such as 'calculator.noRateSet'
        `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 `null` if none.
        `locale` - the locale in which to do the lookup
      返回:
        the resolved message
      抛出:
        `NoSuchMessageException` - if the message wasn't found
      另请参阅:
        `MessageFormat`

    - #### getMessage

          public final String getMessage(MessageSourceResolvable resolvable,
                                         Locale locale)
                                  throws NoSuchMessageException

      从接口复制的说明: `MessageSource`
      Try to resolve the message using all the attributes contained within the `MessageSourceResolvable` argument that was passed in.

      NOTE: We must throw a `NoSuchMessageException` on this method since at the time of calling this method we aren't able to determine if the `defaultMessage` property of the resolvable is `null` or not.

      指定者:
        `getMessage` 在接口中 `MessageSource`
      参数:
        `resolvable` - the value object storing attributes required to resolve a message
        `locale` - the locale in which to do the lookup
      返回:
        the resolved message
      抛出:
        `NoSuchMessageException` - if the message wasn't found
      另请参阅:
        `MessageFormat`

    - #### getMessageInternal

          @Nullable
          protected String getMessageInternal(@Nullable
                                                         String code,
                                                         @Nullable
                                                         Object[] args,
                                                         @Nullable
                                                         Locale locale)

      Resolve the given code and arguments as message in the given Locale, returning `null` if not found. Does not fall back to the code as default message. Invoked by `getMessage` methods.
      参数:
        `code` - the code to lookup up, such as 'calculator.noRateSet'
        `args` - array of arguments that will be filled in for params within the message
        `locale` - the locale in which to do the lookup
      返回:
        the resolved message, or `null` if not found
      另请参阅:
        `getMessage(String, Object[], String, Locale)`, `getMessage(String, Object[], Locale)`, `getMessage(MessageSourceResolvable, Locale)`, `setUseCodeAsDefaultMessage(boolean)`

    - #### getMessageFromParent

          @Nullable
          protected String getMessageFromParent(String code,
                                                           @Nullable
                                                           Object[] args,
                                                           Locale locale)

      Try to retrieve the given message from the parent `MessageSource`, if any.
      参数:
        `code` - the code to lookup up, such as 'calculator.noRateSet'
        `args` - array of arguments that will be filled in for params within the message
        `locale` - the locale in which to do the lookup
      返回:
        the resolved message, or `null` if not found
      另请参阅:
        `getParentMessageSource()`

    - #### getDefaultMessage

          @Nullable
          protected String getDefaultMessage(MessageSourceResolvable resolvable,
                                                        Locale locale)

      Get a default message for the given `MessageSourceResolvable`.

      This implementation fully renders the default message if available, or just returns the plain default message `String` if the primary message code is being used as a default message.

      参数:
        `resolvable` - the value object to resolve a default message for
        `locale` - the current locale
      返回:
        the default message, or `null` if none
      从以下版本开始:
        4.3.6
      另请参阅:
        `MessageSourceSupport.renderDefaultMessage(String, Object[], Locale)`, `getDefaultMessage(String)`

    - #### getDefaultMessage

          @Nullable
          protected String getDefaultMessage(String code)

      Return a fallback default message for the given code, if any.

      Default is to return the code itself if "useCodeAsDefaultMessage" is activated, or return no fallback else. In case of no fallback, the caller will usually receive a `NoSuchMessageException` from `getMessage`.

      参数:
        `code` - the message code that we couldn't resolve and that we didn't receive an explicit default message for
      返回:
        the default message to use, or `null` if none
      另请参阅:
        `setUseCodeAsDefaultMessage(boolean)`

    - #### resolveArguments

          protected Object[] resolveArguments(@Nullable
                                              Object[] args,
                                              Locale locale)

      Searches through the given array of objects, finds any MessageSourceResolvable objects and resolves them.

      Allows for messages to have MessageSourceResolvables as arguments.

      覆盖:
        `resolveArguments` 在类中 `MessageSourceSupport`
      参数:
        `args` - array of arguments for a message
        `locale` - the locale to resolve through
      返回:
        an array of arguments with any MessageSourceResolvables resolved

    - #### resolveCodeWithoutArguments

          @Nullable
          protected String resolveCodeWithoutArguments(String code,
                                                                  Locale locale)

      Subclasses can override this method to resolve a message without arguments in an optimized fashion, i.e. to resolve without involving a MessageFormat.

      The default implementation does use MessageFormat, through delegating to the `resolveCode(java.lang.String, java.util.Locale)` method. Subclasses are encouraged to replace this with optimized resolution.

      Unfortunately, `java.text.MessageFormat` is not implemented in an efficient fashion. In particular, it does not detect that a message pattern doesn't contain argument placeholders in the first place. Therefore, it is advisable to circumvent MessageFormat for messages without arguments.

      参数:
        `code` - the code of the message to resolve
        `locale` - the locale to resolve the code for (subclasses are encouraged to support internationalization)
      返回:
        the message String, or `null` if not found
      另请参阅:
        `resolveCode(java.lang.String, java.util.Locale)`, `MessageFormat`

    - #### resolveCode

          @Nullable
          protected abstract MessageFormat resolveCode(String code,
                                                                  Locale locale)

      Subclasses must implement this method to resolve a message.

      Returns a MessageFormat instance rather than a message String, to allow for appropriate caching of MessageFormats in subclasses.

      Subclasses are encouraged to provide optimized resolution for messages without arguments, not involving MessageFormat. See the `resolveCodeWithoutArguments(java.lang.String, java.util.Locale)` javadoc for details.

      参数:
        `code` - the code of the message to resolve
        `locale` - the locale to resolve the code for (subclasses are encouraged to support internationalization)
      返回:
        the MessageFormat for the message, or `null` if not found
      另请参阅:
        `resolveCodeWithoutArguments(String, java.util.Locale)`