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