SpringBoot AOPプログラミング

7796 ワード

SpringBoot AOPプログラミング
  • 最初のステップ:POMファイルにAOP依存
  • をインポートする
  • 第2ステップ:AOP接面
  • を実現する
  • 1.@Aspect注記を使用して、クラスを断面クラス
  • としてマークします.
  • 2.@Pointcutを使用して切り込み点を定義します.たとえば、あるpackageの下のすべての関数が注釈であるなどの規則的な式です.
  • 3.前のステップの切り込みポイントについて異なる通知を作成します:
  • @Before//メソッド実行前に呼び出された
  • @After//メソッド実行後に呼び出され、メソッド実行が成功したかどうかにかかわらず
  • @AfterReturning//メソッドが正常に完了した後にのみ実行される通知
  • @AfterThrowing//メソッド投げ出し異常終了時に実行する通知
  • @Around//メソッドの実行前後に呼び出された通知
  • ステップ1:POMファイルにAOP依存をインポートする
    <!--aop-->
    <dependency>  
    	<groupId>org.springframework.boot</groupId>  
    	<artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <!--spring  aop     JDK  ,spring aop     JDK    ,        ,    proxy-target-class    。  proxy-target-class=true,            (    cglib )。 -->
    <!--        ,      -->
    <dependency>  
    	<groupId>cglib</groupId>  
    	<artifactId>cglib</artifactId>  
    	<version>3.2.12</version>
    </dependency>
    

    ステップ2:AOPカットを実現する
    1.@Aspect注記を使用してクラスを断面クラスとしてマーク
    2.@Pointcutを使用して1つの切り込み点を定義します.たとえば、あるpackageの下のすべての関数が1つの注釈であってもよいなどの規則式です.
    3.前のステップの切り込み点について、異なる通知を作成します.
    @Before//メソッド実行前に呼び出されます
    @After//メソッドの実行後に呼び出されます.メソッドの実行が成功したかどうかにかかわらず
    @AfterReturning//メソッドが正常に完了した後にのみ実行される通知
    @AfterThrowing//メソッドが異常終了を投げ出した場合に実行する通知
    @Around//メソッドの実行前と後に呼び出された通知
    //      ,     
    @Aspect  //      
    @Component  //   IOC   
    public class MyWebLogAspect{
    
    	//           myWebLog,  ,       execution(  )    controller  
    	@Pointcut("execution(public * com.haoge.controller.*.*(..))" )
    	public void myWebLog(){
    	}
    
    	//        ,                ,            
    	@Before("myWebLog()")
    	public void doBefore(){
    	System.out.println("------    ,        ---")
    	}
    	
    	// Before  
    	@After("myWebLog()")
    	    	public void doAfter(){
    	        	System.out.println("AOP after");
    	    	}
    	
    	
    	// Before  ,          ,   value returning
    	@AfterReturning(value="myWebLog()",returning="result")
    	public void doAfterReturning(Object result){
    	//       
    	}
    }