[技術分享]20171214_spring_@Before @After @AfterReturning @Around @AfterThrowing spring aop 的advise(通知)

今天在項目中成功實現了spring aop 。spring

@Before @After @AfterReturning @Around @AfterThrowing spa

這五個是實現spring aop經常使用的五個註解code

相關的註解還有@Aspect @Component @PointCut blog

 

我在實踐中發現:get

1.@Before @After @AfterReturning @Around 這四個通知只有用一種,若是使用兩種及以上會發生一些問題。io

2.@@PointCut 註解的方法不會被執行,只起到了一個把切面表達式抽象出來的做用。class

3.@AfterReturning是最經常使用的:object

使用 JointPoint.getArgs()能夠獲取執行目標方法時傳入的參數。(同@Before @After @Around @AfterThrowing)aop

@AfterReturning註解中的returning = "object"應該和形參的object名字一致 ,用來接收目標方法的返回值。方法

@AfterReturning(pointcut="execution(...) " returning="object")
public void afterReturning(JointPoint jp,Object object){ 
//注意這裏的object 應該和returning="object"保持一致 System.out.println(object); //object是目標方法返回的參數 System.out.println(jp.getArgs() ); //經過這種方法能夠獲取目標方法的傳入參數 }

 

下面是更具體的內容:

@Aspect
@Componet
public class myPointCut{

  @Before("execution(...) ")
  public void before(){ 
        System.out.println("前置通知:在目標方法執行前執行" ); 
  }
    
  @After("execution(...) ")
  public void after(){ 
        System.out.println("後置通知:在目標方法執行後執行" ); 
  }

  @Around("execution(...) ")
  public void around(){ 
        System.out.println("環繞通知:在目標方法執行先後都執行" ); 
  }

  @AfterReturning(pointcut="execution(...) " returning="object")
  public void afterReturning(JointPoint jp,Object object){ 
     //注意這裏的object 應該和returning="object"保持一致   System.out.println(object); //object是目標方法返回的參數   System.out.println(jp.getArgs() ); //經過這種方法能夠獲取目標方法的傳入參數   }   @AfterThrowing("execution(...) ")   public void afterThrowing(){   System.out.println("異常通知:在目標方法發生異常時執行" );   } }
相關文章
相關標籤/搜索