高速-Spring学習(AOPのアノテーションの設定)

第5章AOPのコンフィギュレーションノート

5.1ポイントカット表現

5.1.1役割

表現の仕方によって、一個の以上の特定の接続ポイントの場所。

5.1.2構文の詳細

  1. ポイントカット式の構文
execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表]))
  1. イラスト
    ここに画像を挿入説明
    ここに画像を挿入説明
    ここに画像を挿入説明
    ここに画像を挿入説明
    ここに画像を挿入説明
  2. AspectJの、 "&&"、 "||" によってポイントカット表現、 "!"、等でオペレータを兼ね備えています。
    ここに画像を挿入説明

実際の態様のクラスへ5.1.3エントリポイント発現

ここに画像を挿入説明

5.2現在の接続ポイントの詳細

5.2.1概要

ポイントカット表現は、通常、マクロの群から方法を配置し、通知特定の注釈は、対応する接続​​点を決定するために組み合わせることができます。だから、特定の接続ポイントの面で、我々は例えば、情報のこの特定の接続点を気かもしれません:メソッドの名前は、パラメータの現在の値が渡され、その上の接続ポイントの現在の方法を。この情報は、オブジェクトインスタンスジョインポイントインターフェイスにカプセル化されます。

5.2.2ジョインポイント

ここに画像を挿入説明

5.3通知

5.3.1概要

  1. 特定の接続ポイントでの操作を行うことができます。
  2. セクションには、1つ以上の通知を含むことができます。
  3. 注釈付きの式を通知するために使用される値は、多くの場合、出発点です。

5.3.2事前通知

  1. 前のアドバイス:アドバイスは、実行メソッドの前に実行されます
  2. 使用注釈@Before

5.3.3リア予告

  1. ポスト通知:リア通知、すなわちリターンの結合点、接続点の完了後に行われる場合、または結果例外をスローされます
  2. 使用注釈@After

5.3.4リターン通知

  1. ニュースに戻る:アドバイスが実行されるかどうかは後に接続点が、通常の復帰または例外がスローされています。あなたは、接続点を返されたときにログに記録したい場合は、戻り値の通知ではなく、通知後の使用すべきです。
  2. 使用@AfterReturning注釈、アクセスポイント接続通知戻る戻り値
    復帰通知に①限り、追加の注釈を@AfterReturningに戻るのプロパティは、接続点の戻り値にアクセスすることができます。この属性の値は、の戻り値に渡されたパラメータの名前です
    ②署名通知方法で同じ名前のパラメータを追加する必要があります。実行時の戻り値で春AOPは、このパラメータを通過
    ③オリジナルの接点は、発現プロパティポイントカットに表示されますする必要があります
    ここに画像を挿入説明

5.3.5例外通知

  1. 異常の通知:異常な異常通知が唯一の接続点に投げた場合
  2. 将throwing属性添加到@AfterThrowing注解中,也可以访问连接点抛出的异常。Throwable是所有错误和异常类的顶级父类,所以在异常通知方法可以捕获到任何错误和异常。
  3. 如果只对某种特殊的异常类型感兴趣,可以将参数声明为其他异常的参数类型。然后通知就只在抛出这个类型及其子类的异常时才被执行

5.3.6环绕通知

  1. 环绕通知是所有通知类型中功能最为强大的,能够全面地控制连接点,甚至可以控制是否执行连接点。
  2. 对于环绕通知来说,连接点的参数类型必须是ProceedingJoinPoint。它是 JoinPoint的子接口,允许控制何时执行,是否执行连接点。
  3. 在环绕通知中需要明确调用ProceedingJoinPoint的proceed()方法来执行被代理的方法。如果忘记这样做就会导致通知被执行了,但目标方法没有被执行。
  4. 注意:环绕通知的方法需要返回目标方法执行之后的结果,即调用 joinPoint.proceed();的返回值,否则会出现空指针异常。
    ここに画像を挿入説明

5.4 重用切入点定义

  1. 在编写AspectJ切面时,可以直接在通知注解中书写切入点表达式。但同一个切点表达式可能会在多个通知中重复出现。
  2. 在AspectJ切面中,可以通过@Pointcut注解将一个切入点声明成简单的方法。切入点的方法体通常是空的,因为将切入点定义与应用程序逻辑混在一起是不合理的。
  3. 切入点方法的访问控制符同时也控制着这个切入点的可见性。如果切入点要在多个切面中共用,最好将它们集中在一个公共的类中。在这种情况下,它们必须被声明为public。在引入这个切入点时,必须将类名也包括在内。如果类没有与这个切面放在同一个包中,还必须包含包名。
  4. 其他通知可以通过方法名称引入该切入点
    ここに画像を挿入説明

5.4 指定切面的优先级

  1. 在同一个连接点上应用不止一个切面时,除非明确指定,否则它们的优先级是不确定的。
  2. 切面的优先级可以通过实现Ordered接口或利用@Order注解指定。
  3. 实现Ordered接口,getOrder()方法的返回值越小,优先级越高。
  4. あなたが@Orderノートを使用している場合、数字はコメントに表示されます
    ここに画像を挿入説明
    ここに画像を挿入説明
リリース1333元の記事 ウォンの賞賛1090 ビュー10万+

おすすめ

転載: blog.csdn.net/weixin_42528266/article/details/104274706