public class AspectJAdviceParameterNameDiscoverer extends ObjectSE implements ParameterNameDiscoverer
ParameterNameDiscoverer
実装は、ポイントカット式からアドバイスメソッドのパラメーター名を推測し、句を返し、スローします。明確な解釈が利用できない場合は、null
を返します。このクラスは、引数を次のように解釈します。
JoinPoint
または ProceedingJoinPoint
である場合、thisJoinPoint
をアドバイスに渡すためのものであると想定され、パラメーター名には値 "thisJoinPoint"
が割り当てられます。JoinPoint.StaticPart
の場合、"thisJoinPointStaticPart"
をアドバイスに渡すためのものであると想定され、パラメーター名には値 "thisJoinPointStaticPart"
が割り当てられます。throwingName
が設定されていて、型 Throwable+
のバインドされていない引数がない場合、IllegalArgumentException
SE が発生します。型 Throwable+
のバインドされていない引数が複数ある場合は、AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException
が発生します。型 Throwable+
のバインドされていない引数が 1 つだけある場合、対応するパラメーター名には値 <throwingName> が割り当てられます。a
を、バインディング形式で使用されるアノテーションベースのポイントカット式(@annotation、@this、@target、@args、@within、@withincode)の数とします。バインディング形式での使用箇所は、それ自体を推測する必要があります。ポイントカット内の式が Java 変数名の規則を満たす単一の文字列リテラルである場合、変数名であると見なされます。a
がゼロの場合、次の段階に進みます。a
> 1 の場合、AmbiguousBindingException
が発生します。a
== 1 であり、型 Annotation+
のバインドされていない引数がない場合、IllegalArgumentException
が発生します。そのような引数が 1 つだけある場合、対応するパラメーター名には、ポイントカット式からの値が割り当てられます。IllegalArgumentException
が発生します。バインドされていない引数が複数ある場合は、AmbiguousBindingException
が発生します。バインドされていない引数が 1 つだけある場合は、対応するパラメーター名に値 <returningName> が割り当てられます。this
、target
、args
ポイントカット式についてもう一度調べられます(バインディングフォームは、アノテーションベースのポイントカットに従って推定されます)。プリミティブ型のバインドされていない引数が複数残っている場合(args
でのみバインドできます)、AmbiguousBindingException
が発生します。プリミティブ型の引数が 1 つだけある場合、args
バインド変数が 1 つだけ見つかった場合は、対応するパラメーター名に変数名を割り当てます。args
バインド変数が見つからなかった場合、IllegalStateException
が発生します。複数の args
バインド変数がある場合、AmbiguousBindingException
が発生します。この時点で、バインドされていない引数が複数残っている場合は、AmbiguousBindingException
を発生させます。バインドされていない引数が残っていない場合は、完了です。バインドされていない引数が 1 つだけ残っていて、this
、target
、args
からバインドされていない候補変数名が 1 つしかない場合は、対応するパラメーター名として割り当てられます。複数の可能性がある場合は、AmbiguousBindingException
が発生します。IllegalArgumentException
または AmbiguousBindingException
を発生させる際の動作は、この発見者を責任の連鎖の一部として使用できるように構成できます。デフォルトでは、条件がログに記録され、getParameterNames(..)
メソッドは単に null
を返します。raiseExceptions
プロパティが true
に設定されている場合、条件はそれぞれ IllegalArgumentException
および AmbiguousBindingException
としてスローされます。
それは完全に明確でしたか? ;)
短縮版: 明確なバインディングが推定できる場合、そうです。アドバイスの要件を満たさない可能性がある場合は、null
が返されます。raiseExceptions
プロパティを true
に設定すると、パラメーター名が見つからない場合に null
を返す代わりに説明的な例外がスローされます。
修飾子と型 | クラスと説明 |
---|---|
static class | AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException メソッドのパラメーター名を解決しようとしたときに、あいまいなバインディングが検出されたことに応じてスローされます。 |
コンストラクターと説明 |
---|
AspectJAdviceParameterNameDiscoverer(StringSE pointcutExpression) 指定されたポイントカット式からパラメーター名を発見しようとする新しい発見者を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
StringSE[] | getParameterNames(ConstructorSE<?> ctor) Spring では、アドバイスメソッドをコンストラクターにすることはできません。 |
StringSE[] | getParameterNames(MethodSE method) advice メソッドのパラメーター名を推測します。 |
void | setRaiseExceptions(boolean raiseExceptions) アドバイスパラメーター名の推定に失敗した場合に、 IllegalArgumentException SE および AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException を適切にスローする必要があるかどうかを示します。 |
void | setReturningName(StringSE returningName) afterReturning アドバイスが戻り値をバインドする場合、返す変数名を指定する必要があります。 |
void | setThrowingName(StringSE throwingName) afterThrowing アドバイスがスローされた値をバインドする場合、スローする変数名を指定する必要があります。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setRaiseExceptions(boolean raiseExceptions)
IllegalArgumentException
SE および AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException
を適切にスローする必要があるかどうかを示します。raiseExceptions
- 例外がスローされる場合は true
public void setReturningName(@Nullable StringSE returningName)
afterReturning
アドバイスが戻り値をバインドする場合、返す変数名を指定する必要があります。returningName
- 返される変数の名前 public void setThrowingName(@Nullable StringSE throwingName)
afterThrowing
アドバイスがスローされた値をバインドする場合、スローする変数名を指定する必要があります。throwingName
- スローする変数の名前 @Nullable public StringSE[] getParameterNames(MethodSE method)
使用されるアルゴリズムの詳細については、このクラスの class level javadoc
を参照してください。
ParameterNameDiscoverer
の getParameterNames
method
- ターゲット Method
SE@Nullable public StringSE[] getParameterNames(ConstructorSE<?> ctor)
ParameterNameDiscoverer
の getParameterNames
ctor
- パラメーター名を検索するコンストラクター null
UnsupportedOperationExceptionSE
- raiseExceptions
が true
に設定されている場合