クラス AspectJAdviceParameterNameDiscoverer
java.lang.ObjectSE
org.springframework.aop.aspectj.AspectJAdviceParameterNameDiscoverer
- 実装されたすべてのインターフェース:
ParameterNameDiscoverer
public class AspectJAdviceParameterNameDiscoverer
extends ObjectSE
implements ParameterNameDiscoverer
ParameterNameDiscoverer
実装は、ポイントカット式からアドバイスメソッドのパラメーター名を推測し、句を返し、スローします。明確な解釈が利用できない場合は、null
を返します。アルゴリズムのまとめ
明確なバインディングが推定できる場合、そうです。アドバイスの要件を満たさない可能性がある場合は、null
が返されます。raiseExceptions
プロパティを true
に設定すると、パラメーター名が見つからない場合に 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 つだけある場合は、対応するパラメーター名にポイントカット式の値が割り当てられます。 returningName
が設定されていて、バインドされていない引数がない場合、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(Method)
メソッドは単純に null
を返します。raiseExceptions
プロパティが true
に設定されている場合、条件はそれぞれ IllegalArgumentException
および AmbiguousBindingException
としてスローされます。
- 導入:
- 2.0
- 作成者:
- Adrian Colyer, Juergen Hoeller
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明static class
メソッドのパラメーター名を解決しようとしたときに、あいまいなバインディングが検出されたことに応じてスローされます。コンストラクターのサマリー
コンストラクターコンストラクター説明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
アドバイスが戻り値をバインドする場合、returning
変数名を指定する必要があります。void
setThrowingName
(StringSE throwingName) afterThrowing
アドバイスがスローされた値をバインドする場合、throwing
変数名を指定する必要があります。
コンストラクターの詳細
AspectJAdviceParameterNameDiscoverer
パラメーター名を発見しようとする新しい発見者を作成します。指定されたポイントカット式から。
メソッドの詳細
setRaiseExceptions
public void setRaiseExceptions(boolean raiseExceptions) アドバイスパラメーター名の推定に失敗した場合に、IllegalArgumentException
SE およびAspectJAdviceParameterNameDiscoverer.AmbiguousBindingException
を適切にスローする必要があるかどうかを示します。- パラメーター:
raiseExceptions
- 例外がスローされる場合はtrue
setReturningName
afterReturning
アドバイスが戻り値をバインドする場合、returning
変数名を指定する必要があります。- パラメーター:
returningName
- 返される変数の名前
setThrowingName
afterThrowing
アドバイスがスローされた値をバインドする場合、throwing
変数名を指定する必要があります。- パラメーター:
throwingName
- スローする変数の名前
getParameterNames
advice メソッドのパラメーター名を推測します。使用されるアルゴリズムの詳細については、このクラスの
class-level javadoc
を参照してください。- 次で指定:
- インターフェース
ParameterNameDiscoverer
のgetParameterNames
- パラメーター:
method
- ターゲットMethod
SE- 戻り値:
- パラメーター名
getParameterNames
Spring では、アドバイスメソッドをコンストラクターにすることはできません。- 次で指定:
- インターフェース
ParameterNameDiscoverer
のgetParameterNames
- パラメーター:
ctor
- パラメーター名を検索するコンストラクター- 戻り値:
null
- 例外:
UnsupportedOperationExceptionSE
-raiseExceptions
がtrue
に設定されている場合