クラス AbstractMessageSource

java.lang.ObjectSE
org.springframework.context.support.MessageSourceSupport
org.springframework.context.support.AbstractMessageSource
実装されたすべてのインターフェース:
HierarchicalMessageSourceMessageSource
既知の直属サブクラス
AbstractResourceBasedMessageSourceStaticMessageSource

public abstract class AbstractMessageSource extends MessageSourceSupport implements HierarchicalMessageSource
HierarchicalMessageSource インターフェースの抽象的な実装、メッセージバリアントの一般的な処理の実装、具体的な MessageSource の特定の戦略の実装を容易にします。

サブクラスは抽象 resolveCode(java.lang.String, java.util.Locale) メソッドを実装する必要があります。引数なしのメッセージを効率的に解決するには、resolveCodeWithoutArguments(java.lang.String, java.util.Locale) メソッドもオーバーライドして、MessageFormat を使用せずにメッセージを解決する必要があります。

注意 : デフォルトでは、メッセージに引数が渡された場合、メッセージテキストは MessageFormat を通じてのみ解析されます。引数がない場合、メッセージテキストはそのまま返されます。実際の引数があるメッセージに対してのみ MessageFormat エスケープを使用し、その他のメッセージはエスケープしないままにする必要があります。すべてのメッセージをエスケープする場合は、"alwaysUseMessageFormat" フラグを "true" に設定します。

MessageSourceResolvables をプライマリメッセージとしてサポートするだけでなく、MessageSourceResolvables 自体であるメッセージ引数の解決もサポートします。

このクラスはコードごとのメッセージのキャッシュを実装しません。サブクラスはメッセージを時間とともに動的に変更できます。サブクラスでは、変更を意識した方法でメッセージをキャッシュすることをお勧めします。これにより、更新されたメッセージのホットデプロイが可能になります。

作成者:
Juergen Hoeller, Rod Johnson
関連事項:
  • コンストラクターの詳細

    • AbstractMessageSource

      public AbstractMessageSource()
  • メソッドの詳細

    • setParentMessageSource

      public void setParentMessageSource(@Nullable MessageSource parent)
      インターフェースからコピーされた説明: HierarchicalMessageSource
      このオブジェクトが解決できないメッセージを解決しようとするために使用される親を設定します。
      次で指定:
      インターフェース HierarchicalMessageSourcesetParentMessageSource 
      パラメーター:
      parent - このオブジェクトが解決できないメッセージを解決するために使用される親 MessageSource null の場合があり、その場合、それ以上の解決は不可能です。
    • getParentMessageSource

      @Nullable public MessageSource getParentMessageSource()
      インターフェースからコピーされた説明: HierarchicalMessageSource
      この MessageSource の親、または存在しない場合は null を返します。
      次で指定:
      インターフェース HierarchicalMessageSourcegetParentMessageSource 
    • setCommonMessages

      public void setCommonMessages(@Nullable PropertiesSE commonMessages)
      ロケールに依存しない共通メッセージを指定します。メッセージコードをキーとして、メッセージストリング全体(引数プレースホルダーを含む場合があります)を値として使用します。

      また、たとえば PropertiesFactoryBean を通じて定義された、外部で定義された Properties オブジェクトにリンクすることもできます。

    • getCommonMessages

      @Nullable protected PropertiesSE getCommonMessages()
      ロケールに依存しない共通メッセージがあれば、それを定義する Properties オブジェクトを返します。
    • setUseCodeAsDefaultMessage

      public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
      NoSuchMessageException をスローする代わりに、メッセージコードをデフォルトメッセージとして使用するかどうかを設定します。開発とデバッグに役立ちます。デフォルトは "false" です。

      メモ: 親 MessageSource を持っている(FieldError のような)複数のコードと MessageSourceResolvable と MessageSource の場合は、に "useCodeAsDefaultMessage" を活性化しません : それ以外の場合は、親からメッセージとして返された最初のコードを取得しますが、それ以上のコードをチェックすることはありません。

      親で "useCodeAsDefaultMessage" をオンにして作業できるように、AbstractMessageSource および AbstractApplicationContext には、使用可能な場合は内部 getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale) メソッドに委譲するための特別なチェックが含まれています。一般的には、開発中に "useCodeAsDefaultMessage" を使用することをお勧めしますが、そもそも本番環境では使用しないでください。

      関連事項:
    • isUseCodeAsDefaultMessage

      protected boolean isUseCodeAsDefaultMessage()
      NoSuchMessageException をスローする代わりに、デフォルトメッセージとしてメッセージコードを使用するかどうかを返します。開発とデバッグに役立ちます。デフォルトは "false" です。

      または、getDefaultMessage(org.springframework.context.MessageSourceResolvable, java.util.Locale) メソッドをオーバーライドして、解決できないコードのカスタムフォールバックメッセージを返すことを検討してください。

      関連事項:
    • getMessage

      @Nullable public final StringSE getMessage(StringSE code, @Nullable ObjectSE[] args, @Nullable StringSE defaultMessage, LocaleSE locale)
      インターフェースからコピーされた説明: MessageSource
      メッセージの解決を試みます。メッセージが見つからなかった場合、デフォルトのメッセージを返します。
      次で指定:
      インターフェース MessageSourcegetMessage 
      パラメーター:
      code - 検索するメッセージコード (例: 'calculator.noRateSet' )。MessageSource ユーザーは、潜在的な競合を回避し、最大限の明確さを確保するために、修飾クラス名またはパッケージ名に基づいてメッセージ名を付けることをお勧めします。
      args - メッセージ内のパラメーター(パラメーターはメッセージ内で "{0}", "{1,date}", "{2,time}" のように見えます)、または存在しない場合は null に入力される引数の配列
      defaultMessage - ルックアップが失敗した場合に返すデフォルトのメッセージ
      locale - ルックアップを行うロケール
      戻り値:
      検索が成功した場合は解決されたメッセージ、そうでない場合はパラメーターとして渡されたデフォルトのメッセージ (null の可能性があります)
      関連事項:
    • getMessage

      public final StringSE getMessage(StringSE code, @Nullable ObjectSE[] args, LocaleSE locale) throws NoSuchMessageException
      インターフェースからコピーされた説明: MessageSource
      メッセージの解決を試みます。メッセージが見つからない場合はエラーとして扱います。
      次で指定:
      インターフェース MessageSourcegetMessage 
      パラメーター:
      code - 検索するメッセージコード (例: 'calculator.noRateSet' )。MessageSource ユーザーは、潜在的な競合を回避し、最大限の明確さを確保するために、修飾クラス名またはパッケージ名に基づいてメッセージ名を付けることをお勧めします。
      args - メッセージ内のパラメーター(パラメーターはメッセージ内で "{0}", "{1,date}", "{2,time}" のように見えます)、または存在しない場合は null に入力される引数の配列
      locale - ルックアップを行うロケール
      戻り値:
      解決されたメッセージ (非 null)
      例外:
      NoSuchMessageException - 対応するメッセージが見つからなかった場合
      関連事項:
    • getMessage

      public final StringSE getMessage(MessageSourceResolvable resolvable, LocaleSE locale) throws NoSuchMessageException
      インターフェースからコピーされた説明: MessageSource
      渡された MessageSourceResolvable 引数内に含まれるすべての属性を使用して、メッセージの解決を試みます。

      NOTE: このメソッドを呼び出す時点で、解決可能なオブジェクトの defaultMessage プロパティが null であるかどうかを判断できないため、このメソッドで NoSuchMessageException をスローする必要があります。

      次で指定:
      インターフェース MessageSourcegetMessage 
      パラメーター:
      resolvable - メッセージの解決に必要な属性を格納する値オブジェクト (デフォルトのメッセージを含めることができます)
      locale - ルックアップを行うロケール
      戻り値:
      解決されたメッセージ (MessageSourceResolvable -provided のデフォルトメッセージでさえ null 以外である必要があるため、null を使用しない)
      例外:
      NoSuchMessageException - 対応するメッセージが見つからなかった場合 (MessageSourceResolvable によって提供されるデフォルトメッセージはありません)
      関連事項:
    • getMessageInternal

      @Nullable protected StringSE getMessageInternal(@Nullable StringSE code, @Nullable ObjectSE[] args, @Nullable LocaleSE locale)
      指定されたロケールでメッセージとして指定されたコードと引数を解決し、見つからない場合は null を返します。デフォルトメッセージとしてコードにフォールバックしませんgetMessage メソッドによって呼び出されます。
      パラメーター:
      code - "calculator.noRateSet" などのルックアップするコード
      args - メッセージ内のパラメーター用に入力される引数の配列
      locale - ルックアップを行うロケール
      戻り値:
      解決されたメッセージ、または見つからない場合は null 
      関連事項:
    • getMessageFromParent

      @Nullable protected StringSE getMessageFromParent(StringSE code, @Nullable ObjectSE[] args, LocaleSE locale)
      指定されたメッセージを親 MessageSource から取得しようとします(存在する場合)。
      パラメーター:
      code - "calculator.noRateSet" などのルックアップするコード
      args - メッセージ内のパラメーター用に入力される引数の配列
      locale - ルックアップを行うロケール
      戻り値:
      解決されたメッセージ、または見つからない場合は null 
      関連事項:
    • getDefaultMessage

      @Nullable protected StringSE getDefaultMessage(MessageSourceResolvable resolvable, LocaleSE locale)
      指定された MessageSourceResolvable のデフォルトメッセージを取得します。

      この実装は、使用可能な場合はデフォルトメッセージを完全にレンダリングします。プライマリメッセージコードがデフォルトメッセージとして使用されている場合は、プレーンなデフォルトメッセージ String を返します。

      パラメーター:
      resolvable - デフォルトのメッセージを解決する値オブジェクト
      locale - 現在のロケール
      戻り値:
      デフォルトのメッセージ、または存在しない場合は null 
      導入:
      4.3.6
      関連事項:
    • getDefaultMessage

      @Nullable protected StringSE getDefaultMessage(StringSE code)
      指定されたコードのフォールバックデフォルトメッセージがあれば、それを返します。

      デフォルトでは、"useCodeAsDefaultMessage" がアクティブになっている場合はコード自体を返すか、他のフォールバックを返しません。フォールバックがない場合、発信者は通常 getMessage から NoSuchMessageException を受け取ります。

      パラメーター:
      code - 解決できず、明示的なデフォルトメッセージを受信しなかったメッセージコード
      戻り値:
      使用するデフォルトのメッセージ、または存在しない場合は null 
      関連事項:
    • resolveArguments

      protected ObjectSE[] resolveArguments(@Nullable ObjectSE[] args, LocaleSE locale)
      指定されたオブジェクトの配列を検索し、MessageSourceResolvable オブジェクトを見つけて解決します。

      メッセージに引数として MessageSourceResolvables を含めることができます。

      オーバーライド:
      クラス MessageSourceSupportresolveArguments 
      パラメーター:
      args - メッセージの引数の配列
      locale - 解決するロケール
      戻り値:
      MessageSourceResolvables が解決された引数の配列
    • resolveCodeWithoutArguments

      @Nullable protected StringSE resolveCodeWithoutArguments(StringSE code, LocaleSE locale)
      サブクラスはこのメソッドをオーバーライドして、引数なしで最適化された方法でメッセージを解決できます。つまり、MessageFormat を使用せずに解決できます。

      デフォルトの実装でresolveCode(java.lang.String, java.util.Locale) メソッドに委譲することにより、MessageFormat を使用します。サブクラスでは、これを最適化された解決に置き換えることをお勧めします。

      残念ながら、java.text.MessageFormat は効率的な方法で実装されていません。特に、そもそもメッセージパターンに引数プレースホルダーが含まれていないことを検出しません。引数のないメッセージの場合は MessageFormat を回避することをお勧めします。

      パラメーター:
      code - 解決するメッセージのコード
      locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)
      戻り値:
      メッセージ文字列、または見つからない場合は null 
      関連事項:
    • resolveCode

      @Nullable protected abstract MessageFormatSE resolveCode(StringSE code, LocaleSE locale)
      サブクラスは、メッセージを解決するためにこのメソッドを実装する必要があります。

      サブクラスで MessageFormats を適切にキャッシュできるように、メッセージ文字列ではなく MessageFormat インスタンスを返します。

      サブクラスは、MessageFormat を含まない、引数のないメッセージの最適化された解決を提供することが推奨されます。詳細については、resolveCodeWithoutArguments(java.lang.String, java.util.Locale) javadoc を参照してください。

      パラメーター:
      code - 解決するメッセージのコード
      locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)
      戻り値:
      メッセージの MessageFormat。見つからない場合は null 
      関連事項: