アスペクト: アスペクト
アスペクト = ポイントカット通知。古い Spring バージョンでは通常 XML 構成が使用されますが、現在ではクラスには通常 @Aspect アノテーションが付けられます。アスペクトは、指定された結合ポイントに横断的なロジック (アドバイス) を織り込む責任があります。
ターゲット オブジェクト: Target
強化されるオブジェクト。
結合ポイント: JoinPoint
インターセプトできるプログラム実行ポイントは、Spring のクラス内のメソッドです。
エントリ ポイント: PointCut
インターセプトする必要があるメソッドは、特に横断的なロジックを実装するメソッドです。ポイントカット ルールは、AspectJ ポイントカット式言語を通じて Spring で記述されます。
エントリー ポイントと接続ポイントの違い: 接続ポイントはすべて「カット」できるポイントであり、エントリー ポイントは本当にカットしたいポイントです。
アドバイス: アドバイス
「前後」、「前」、「後」などのさまざまな種類のアドバイスを含む、エントリ ポイントの横断的なロジック。
アドバイスのアクション ポイントの名前は次のとおりです:
before: エントリ ポイントの前に実行されます
after: after エントリ ポイントの後に実行
#around: エントリ ポイントでメソッドをインターセプト、カスタマイズの前後、より柔軟な
ありいくつかの例外処理通知もあります。ここでは 1 つずつ例を示しません。
#Weaving
最初はアスペクト クラスです:
package com.example.demo.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; /** * @author Fcb * @date 2020/6/20 * @description 切面类=切入点+通知 */ @Aspect @Component public class LogAspect { //这个方法定义了切入点 @Pointcut("@annotation(com.example.demo.aop.anno.MyLog)") public void pointCut() {} //这个方法定义了具体的通知 @After("pointCut()") public void recordRequestParam(JoinPoint joinPoint) { for (Object s : joinPoint.getArgs()) { //打印所有参数,实际中就是记录日志了 System.out.println("after advice : " + s); } } //这个方法定义了具体的通知 @Before("pointCut()") public void startRecord(JoinPoint joinPoint) { for (Object s : joinPoint.getArgs()) { //打印所有参数 System.out.println("before advice : " + s); } } //这个方法定义了具体的通知 @Around("pointCut()") public Object aroundRecord(ProceedingJoinPoint pjp) throws Throwable { for (Object s : pjp.getArgs()) { //打印所有参数 System.out.println("around advice : " + s); } return pjp.proceed(); } }アノテーション:
package com.example.demo.aop.anno; import java.lang.annotation.*; /** * @author Fcb * @date 2020/6/20 * @description */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface MyLog { }ターゲット クラス:
package com.example.demo.aop.target; import com.example.demo.aop.anno.MyLog; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @author Fcb * @date 2020/6/20 * @description */ @RestController public class MockController { @RequestMapping("/hello") @MyLog public String helloAop(@RequestParam String key) { System.out.println("do something..."); return "hello world"; } }最後にテスト クラス:
package com.example.demo.aop.target; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; /** * @author Fcb * @date 2020/6/20 * @description */ @SpringBootTest class MockControllerTest { @Autowired MockController mockController; @Test void helloAop() { mockController.helloAop("aop"); } }コンソールの結果:
周りのアドバイス : aop推奨チュートリアル: "前アドバイス : aop
何かをしてください...
後アドバイス : aop
JavaTutorial>>
以上がSpring AOP アノテーションの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
