クラス AspectJAdviceParameterNameDiscoverer

java.lang.ObjectSE
org.springframework.aop.aspectj.AspectJAdviceParameterNameDiscoverer
実装されたすべてのインターフェース:
ParameterNameDiscoverer

public class AspectJAdviceParameterNameDiscoverer extends ObjectSE implements ParameterNameDiscoverer
ParameterNameDiscoverer 実装は、ポイントカット式からアドバイスメソッドのパラメーター名を推測し、句を返し、スローします。明確な解釈が利用できない場合は、null を返します。

アルゴリズムのまとめ

明確なバインディングが推定できる場合、そうです。アドバイスの要件を満たさない可能性がある場合は、null が返されます。raiseExceptions プロパティを true に設定すると、パラメーター名が見つからない場合に null を返す代わりに説明的な例外がスローされます。

アルゴリズムの詳細

このクラスは、引数を次のように解釈します。

  1. メソッドの最初のパラメーターの型が JoinPoint または ProceedingJoinPoint である場合、thisJoinPoint をアドバイスに渡すためのものであると想定され、パラメーター名には値 "thisJoinPoint" が割り当てられます。
  2. メソッドの最初のパラメーターの型が JoinPoint.StaticPart の場合、"thisJoinPointStaticPart" をアドバイスに渡すためのものであると想定され、パラメーター名には値 "thisJoinPointStaticPart" が割り当てられます。
  3. throwingName が設定されていて、型 Throwable+ のバインドされていない引数がない場合、IllegalArgumentExceptionSE が発生します。型 Throwable+ のバインドされていない引数が複数ある場合は、AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException が発生します。型 Throwable+ のバインドされていない引数が 1 つだけある場合、対応するパラメーター名には値 <throwingName> が割り当てられます。
  4. バインドされていない引数が残っている場合は、ポイントカット式が調べられます。a を、バインド形式で使用されるアノテーションベースのポイントカット式 (@annotation、@this、@target、@args、@within、@withincode) の数とします。バインディング形式での使用は、それ自体が推測されます。ポイントカット内の式が、Java 変数名の規則を満たす単一の文字列リテラルである場合、変数名であると見なされます。a がゼロの場合、次の段階に進みます。a > 1 の場合、AmbiguousBindingException が発生します。a == 1 で、型 Annotation+ のバインドされていない引数がない場合、IllegalArgumentException が発生します。そのような引数が 1 つだけある場合は、対応するパラメーター名にポイントカット式の値が割り当てられます。
  5. returningName が設定されていて、バインドされていない引数がない場合、IllegalArgumentException が発生します。複数のバインドされていない引数がある場合、AmbiguousBindingException が発生します。バインドされていない引数が 1 つだけある場合は、対応するパラメーター名に returningName の値が割り当てられます。
  6. バインドされていない引数が残っている場合、ポイントカット式は、バインディングフォームで使用されている thistargetargs ポイントカット式についてもう一度調べられます(バインディングフォームは、アノテーションベースのポイントカットに従って推定されます)。プリミティブ型のバインドされていない引数が複数残っている場合(args でのみバインドできます)、AmbiguousBindingException が発生します。プリミティブ型の引数が 1 つだけある場合、args バインド変数が 1 つだけ見つかった場合は、対応するパラメーター名に変数名を割り当てます。args バインド変数が見つからなかった場合、IllegalStateException が発生します。複数の args バインド変数がある場合、AmbiguousBindingException が発生します。この時点で、バインドされていない引数が複数残っている場合は、AmbiguousBindingException を発生させます。バインドされていない引数が残っていない場合は、完了です。バインドされていない引数が 1 つだけ残っていて、thistargetargs からバインドされていない候補変数名が 1 つしかない場合は、対応するパラメーター名として割り当てられます。複数の可能性がある場合は、AmbiguousBindingException が発生します。

IllegalArgumentException または AmbiguousBindingException を発生させたときの動作は、このディスカバーを一連の責任の一部として使用できるように構成可能です。デフォルトでは、条件はログに記録され、getParameterNames(Method) メソッドは単純に null を返します。raiseExceptions プロパティが true に設定されている場合、条件はそれぞれ IllegalArgumentException および AmbiguousBindingException としてスローされます。

導入:
2.0
作成者:
Adrian Colyer, Juergen Hoeller
  • コンストラクターの詳細

    • AspectJAdviceParameterNameDiscoverer

      public AspectJAdviceParameterNameDiscoverer(@Nullable StringSE pointcutExpression)
      パラメーター名を発見しようとする新しい発見者を作成します。指定されたポイントカット式から。
  • メソッドの詳細

    • setRaiseExceptions

      public void setRaiseExceptions(boolean raiseExceptions)
      アドバイスパラメーター名の推定に失敗した場合に、IllegalArgumentExceptionSE および AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException を適切にスローする必要があるかどうかを示します。
      パラメーター:
      raiseExceptions - 例外がスローされる場合は true 
    • setReturningName

      public void setReturningName(@Nullable StringSE returningName)
      afterReturning アドバイスが戻り値をバインドする場合、returning 変数名を指定する必要があります。
      パラメーター:
      returningName - 返される変数の名前
    • setThrowingName

      public void setThrowingName(@Nullable StringSE throwingName)
      afterThrowing アドバイスがスローされた値をバインドする場合、throwing 変数名を指定する必要があります。
      パラメーター:
      throwingName - スローする変数の名前
    • getParameterNames

      @Nullable public StringSE[] getParameterNames(MethodSE method)
      advice メソッドのパラメーター名を推測します。

      使用されるアルゴリズムの詳細については、このクラスの class-level javadoc を参照してください。

      次で指定:
      インターフェース ParameterNameDiscoverergetParameterNames 
      パラメーター:
      method - ターゲット MethodSE
      戻り値:
      パラメーター名
    • getParameterNames

      @Nullable public StringSE[] getParameterNames(ConstructorSE<?> ctor)
      Spring では、アドバイスメソッドをコンストラクターにすることはできません。
      次で指定:
      インターフェース ParameterNameDiscoverergetParameterNames 
      パラメーター:
      ctor - パラメーター名を検索するコンストラクター
      戻り値:
      null
      例外:
      UnsupportedOperationExceptionSE - raiseExceptions が true に設定されている場合