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 自体であるメッセージ引数の解決もサポートします。
このクラスはコードごとのメッセージのキャッシュを実装しません。サブクラスはメッセージを時間とともに動的に変更できます。サブクラスでは、変更を意識した方法でメッセージをキャッシュすることをお勧めします。これにより、更新されたメッセージのホットデプロイが可能になります。
resolveCode(String, java.util.Locale), resolveCodeWithoutArguments(String, java.util.Locale), MessageSourceSupport.setAlwaysUseMessageFormat(boolean), MessageFormatlogger| コンストラクターと説明 |
|---|
AbstractMessageSource() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected java.util.Properties | getCommonMessages() ロケールに依存しない共通メッセージがあれば、それを定義する Properties オブジェクトを返します。 |
protected java.lang.String | getDefaultMessage(MessageSourceResolvable resolvable, java.util.Locale locale) 指定された MessageSourceResolvable のデフォルトメッセージを取得します。 |
protected java.lang.String | getDefaultMessage(java.lang.String code) 指定されたコードのフォールバックデフォルトメッセージがあれば、それを返します。 |
java.lang.String | getMessage(MessageSourceResolvable resolvable, java.util.Locale locale) 渡された MessageSourceResolvable 引数内に含まれるすべての属性を使用して、メッセージの解決を試みます。 |
java.lang.String | getMessage(java.lang.String code, java.lang.Object[] args, java.util.Locale locale) メッセージの解決を試みます。 |
java.lang.String | getMessage(java.lang.String code, java.lang.Object[] args, java.lang.String defaultMessage, java.util.Locale locale) メッセージの解決を試みます。 |
protected java.lang.String | getMessageFromParent(java.lang.String code, java.lang.Object[] args, java.util.Locale locale) 指定されたメッセージを親 MessageSource から取得しようとします(存在する場合)。 |
protected java.lang.String | getMessageInternal(java.lang.String code, java.lang.Object[] args, java.util.Locale locale) 指定されたロケールでメッセージとして指定されたコードと引数を解決し、見つからない場合は null を返します。 |
MessageSource | getParentMessageSource() この MessageSource の親、または存在しない場合は null を返します。 |
protected boolean | isUseCodeAsDefaultMessage()NoSuchMessageException をスローする代わりに、デフォルトメッセージとしてメッセージコードを使用するかどうかを返します。 |
protected java.lang.Object[] | resolveArguments(java.lang.Object[] args, java.util.Locale locale) 指定されたオブジェクトの配列を検索し、MessageSourceResolvable オブジェクトを見つけて解決します。 |
protected abstract java.text.MessageFormat | resolveCode(java.lang.String code, java.util.Locale locale) サブクラスは、メッセージを解決するためにこのメソッドを実装する必要があります。 |
protected java.lang.String | resolveCodeWithoutArguments(java.lang.String code, java.util.Locale locale) サブクラスはこのメソッドをオーバーライドして、引数なしで最適化された方法でメッセージを解決できます。 |
void | setCommonMessages(java.util.Properties commonMessages) ロケールに依存しない共通メッセージを指定します。メッセージコードをキーとして、メッセージストリング全体(引数プレースホルダーを含む場合があります)を値として使用します。 |
void | setParentMessageSource(MessageSource parent) このオブジェクトが解決できないメッセージを解決しようとするために使用される親を設定します。 |
void | setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)NoSuchMessageException をスローする代わりに、メッセージコードをデフォルトメッセージとして使用するかどうかを設定します。 |
createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, setAlwaysUseMessageFormatpublic void setParentMessageSource(@Nullable MessageSource parent)
HierarchicalMessageSourceHierarchicalMessageSource の setParentMessageSource parent - このオブジェクトが解決できないメッセージを解決するために使用される親 MessageSource null の場合があり、その場合、それ以上の解決は不可能です。@Nullable public MessageSource getParentMessageSource()
HierarchicalMessageSourcenull を返します。HierarchicalMessageSource の getParentMessageSource public void setCommonMessages(@Nullable java.util.Properties commonMessages)
外部で定義された Properties オブジェクト(例: PropertiesFactoryBean によって定義されます。
@Nullable protected java.util.Properties getCommonMessages()
public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
メモ: 親 MessageSource を持っている(FieldError のような)複数のコードと MessageSourceResolvable と MessageSource の場合は、 親に "useCodeAsDefaultMessage" を活性化しません : それ以外の場合は、親からメッセージとして返された最初のコードを取得しますが、それ以上のコードをチェックすることはありません。
親で "useCodeAsDefaultMessage" をオンにして作業できるように、AbstractMessageSource および AbstractApplicationContext には、使用可能な場合は内部 getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale) メソッドに委譲するための特別なチェックが含まれています。一般的には、開発中に "useCodeAsDefaultMessage" を使用することをお勧めしますが、そもそも本番環境では使用しないでください。
protected boolean isUseCodeAsDefaultMessage()
または、getDefaultMessage(org.springframework.context.MessageSourceResolvable, java.util.Locale) メソッドをオーバーライドして、解決できないコードのカスタムフォールバックメッセージを返すことを検討してください。
public final java.lang.String getMessage(java.lang.String code,
@Nullable
java.lang.Object[] args,
@Nullable
java.lang.String defaultMessage,
java.util.Locale locale)MessageSourceMessageSource の getMessage code - "calculator.noRateSet" などのルックアップするコード。このクラスのユーザーは、関連する完全修飾クラス名に基づいてメッセージ名を作成することをお勧めします。これにより、競合を回避し、最大限の明確性を確保できます。args - メッセージ内のパラメーター(パラメーターはメッセージ内の "{0}", "{1,date}", "{2,time}" のように見える)に入力される引数の配列。存在しない場合は null。defaultMessage - ルックアップが失敗した場合に返すデフォルトのメッセージ locale - ルックアップを行うロケール MessageFormatpublic final java.lang.String getMessage(java.lang.String code,
@Nullable
java.lang.Object[] args,
java.util.Locale locale)
throws NoSuchMessageExceptionMessageSourceMessageSource の getMessage code - "calculator.noRateSet" などのルックアップするコード args - メッセージ内のパラメーター(パラメーターはメッセージ内の "{0}", "{1,date}", "{2,time}" のように見える)に入力される引数の配列。存在しない場合は null。locale - ルックアップを行うロケール NoSuchMessageException - メッセージが見つからなかった場合 MessageFormatpublic final java.lang.String getMessage(MessageSourceResolvable resolvable, java.util.Locale locale) throws NoSuchMessageException
MessageSourceMessageSourceResolvable 引数内に含まれるすべての属性を使用して、メッセージの解決を試みます。NOTE: このメソッドを呼び出す時点で、解決可能なオブジェクトの defaultMessage プロパティが null であるかどうかを判断できないため、このメソッドで NoSuchMessageException をスローする必要があります。
MessageSource の getMessage resolvable - メッセージの解決に必要な属性を格納する値オブジェクト locale - ルックアップを行うロケール NoSuchMessageException - メッセージが見つからなかった場合 MessageFormat@Nullable protected java.lang.String getMessageInternal(@Nullable java.lang.String code, @Nullable java.lang.Object[] args, @Nullable java.util.Locale locale)
null を返します。デフォルトメッセージとしてコードにフォールバックしません。getMessage メソッドによって呼び出されます。code - "calculator.noRateSet" などのルックアップするコード args - メッセージ内のパラメーター用に入力される引数の配列 locale - ルックアップを行うロケール null getMessage(String, Object[], String, Locale), getMessage(String, Object[], Locale), getMessage(MessageSourceResolvable, Locale), setUseCodeAsDefaultMessage(boolean)@Nullable protected java.lang.String getMessageFromParent(java.lang.String code, @Nullable java.lang.Object[] args, java.util.Locale locale)
MessageSource から取得しようとします(存在する場合)。code - "calculator.noRateSet" などのルックアップするコード args - メッセージ内のパラメーター用に入力される引数の配列 locale - ルックアップを行うロケール null getParentMessageSource()@Nullable protected java.lang.String getDefaultMessage(MessageSourceResolvable resolvable, java.util.Locale locale)
MessageSourceResolvable のデフォルトメッセージを取得します。 この実装は、使用可能な場合はデフォルトメッセージを完全にレンダリングします。プライマリメッセージコードがデフォルトメッセージとして使用されている場合は、プレーンなデフォルトメッセージ String を返します。
resolvable - デフォルトのメッセージを解決する値オブジェクト locale - 現在のロケール null MessageSourceSupport.renderDefaultMessage(String, Object[], Locale), getDefaultMessage(String)@Nullable protected java.lang.String getDefaultMessage(java.lang.String code)
デフォルトでは、"useCodeAsDefaultMessage" がアクティブになっている場合はコード自体を返すか、他のフォールバックを返しません。フォールバックがない場合、呼び出し元は通常 getMessage から NoSuchMessageException を受け取ります。
code - 解決できず、明示的なデフォルトメッセージを受信しなかったメッセージコード null setUseCodeAsDefaultMessage(boolean)protected java.lang.Object[] resolveArguments(@Nullable java.lang.Object[] args, java.util.Locale locale)
メッセージに引数として MessageSourceResolvables を含めることができます。
MessageSourceSupport の resolveArguments args - メッセージの引数の配列 locale - 解決するロケール @Nullable protected java.lang.String resolveCodeWithoutArguments(java.lang.String code, java.util.Locale locale)
デフォルトの実装では、resolveCode(java.lang.String, java.util.Locale) メソッドに委譲することにより、MessageFormat を使用します。サブクラスでは、これを最適化された解決に置き換えることをお勧めします。
残念ながら、java.text.MessageFormat は効率的な方法で実装されていません。特に、そもそもメッセージパターンに引数プレースホルダーが含まれていないことを検出しません。引数のないメッセージの場合は MessageFormat を回避することをお勧めします。
code - 解決するメッセージのコード locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null resolveCode(java.lang.String, java.util.Locale), MessageFormat@Nullable protected abstract java.text.MessageFormat resolveCode(java.lang.String code, java.util.Locale locale)
サブクラスで MessageFormats を適切にキャッシュできるように、メッセージ文字列ではなく MessageFormat インスタンスを返します。
サブクラスは、MessageFormat を含まない、引数のないメッセージの最適化された解決を提供することが推奨されます。詳細については、resolveCodeWithoutArguments(java.lang.String, java.util.Locale) javadoc を参照してください。
code - 解決するメッセージのコード locale - コードを解決するロケール (サブクラスは国際化をサポートすることが推奨されます)null resolveCodeWithoutArguments(String, java.util.Locale)