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)
, MessageFormat
SElogger
コンストラクターと説明 |
---|
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, setAlwaysUseMessageFormat
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setParentMessageSource(@Nullable MessageSource parent)
HierarchicalMessageSource
HierarchicalMessageSource
の setParentMessageSource
parent
- このオブジェクトが解決できないメッセージを解決するために使用される親 MessageSource null
の場合があり、その場合、それ以上の解決は不可能です。@Nullable public MessageSource getParentMessageSource()
HierarchicalMessageSource
null
を返します。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)
MessageSource
MessageSource
の getMessage
code
- 検索するメッセージコード。"calculator.noRateSet"。MessageSource ユーザーは、潜在的な競合を回避し、最大限の明確性を確保して、修飾されたクラスまたはパッケージ名に基づいてメッセージ名を作成することをお勧めします。args
- メッセージ内のパラメーター(パラメーターはメッセージ内で "{0}", "{1,date}", "{2,time}" のように見えます)、または存在しない場合は null
に入力される引数の配列 defaultMessage
- ルックアップが失敗した場合に返すデフォルトのメッセージ locale
- ルックアップを行うロケール null
の可能性があります)MessageSource.getMessage(MessageSourceResolvable, Locale)
, MessageFormat
SEpublic final StringSE getMessage(StringSE code, @Nullable ObjectSE[] args, LocaleSE locale) throws NoSuchMessageException
MessageSource
MessageSource
の getMessage
code
- 検索するメッセージコード。"calculator.noRateSet"。MessageSource ユーザーは、潜在的な競合を回避し、最大限の明確性を確保して、修飾されたクラスまたはパッケージ名に基づいてメッセージ名を作成することをお勧めします。args
- メッセージ内のパラメーター(パラメーターはメッセージ内で "{0}", "{1,date}", "{2,time}" のように見えます)、または存在しない場合は null
に入力される引数の配列 locale
- ルックアップを行うロケール null
)NoSuchMessageException
- 対応するメッセージが見つからなかった場合 MessageSource.getMessage(MessageSourceResolvable, Locale)
, MessageFormat
SEpublic final StringSE getMessage(MessageSourceResolvable resolvable, LocaleSE locale) throws NoSuchMessageException
MessageSource
MessageSourceResolvable
引数内に含まれるすべての属性を使用して、メッセージの解決を試みます。NOTE: このメソッドを呼び出す時点で、解決可能なオブジェクトの defaultMessage
プロパティが null
であるかどうかを判断できないため、このメソッドで NoSuchMessageException
をスローする必要があります。
MessageSource
の getMessage
resolvable
- メッセージの解決に必要な属性を格納する値オブジェクト (デフォルトのメッセージを含めることができます)locale
- ルックアップを行うロケール MessageSourceResolvable
-provided のデフォルトメッセージでさえ null 以外である必要があるため、null
を使用しない)NoSuchMessageException
- 対応するメッセージが見つからなかった場合 (MessageSourceResolvable
によって提供されるデフォルトメッセージはありません)MessageSourceResolvable.getCodes()
, MessageSourceResolvable.getArguments()
, MessageSourceResolvable.getDefaultMessage()
, MessageFormat
SE@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)
, MessageFormat
SE@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)