Spring實戰 (四) AOP

在軟件開發中,分佈於應用多出的功能被稱爲和橫切關注點. 一般,這些橫切關注點從概念上是與應用的業務邏輯相分離的(可是每每直接嵌入到應用的業務邏輯中).將這些橫切關注點與業務邏輯相分離正是面向切面編成(AOP)所要解決的 java

要了解什麼是AOP,首先應該瞭解AOP相關術語,只有徹底理解這些,才能更好的掌握AOP spa

描述切面的經常使用術語有 通知(advice), 切點(pointcut), 鏈接點(join point). 代理

通知(advice) code

切面有目標-他必需要完成的工做,成爲通知.通知定義了切面是什麼以及什麼時候使用. xml

Spring切面能夠應用5種類型的通知 開發

  • Before                在方法被調用以前調用通知
  • After                  在方法完成以後調用通知,不管方法執行是否成功
  • After-returning    在方法成功執行以後調用通知
  • After-throwing     在方法拋出異常後調用通知
  • Around                通知包裹了被通知的方法,在被通知的方法調用以前和調用以後執行自定義的行爲
鏈接點(join point) 

鏈接點是在應用執行過程當中可以插入切面的一個點.這個點能夠是調用方法時,拋出異常時,甚至修改一個字段時.切面代碼能夠利用這些點插入到應用的正常流程之中,並添加新的行爲 io

切點(pointcut)  class

切點的定義會匹配通知所要織入的一個或多個鏈接點 軟件

切面(Aspect)  aop

切面是通知和切點的結合,通知和切點共同定義了關於切面的所有內容-它是什麼,在什麼時候和何處完成其功能

Spring提供了4種各具特點的AOP支持

  • 基於代理的經典AOP
  • @AspectJ註解驅動的切面
  • 純POJO切面
  • 注入式AspectJ切面(適合Spring各個版本)
如下介紹如何使用註解,在Spring使用AOP

在XML文件中添加以下代碼

<aop:aspectj-autoproxy>
如今開始就可使用@AspectJ註解來開啓AOP,有意思的是,雖然咱們使用@AspectJ註解做爲指引來建立基於代理的切面,但本質上它仍然是一個Spring風格的切面.

如下代碼建立一個POJO使其成爲切面

@Aspect
public class LogAOP {
    //sevice包及其子包全部類的全部方法
    @Pointcut("execution(* com.kenshiro.service..*.*(..))")
    public void log(){}

    @Before("log()")
    public void beforeLog(){
        System.out.println("方法前執行");
    }

    @AfterReturning("log()")
    public void AfterLog(){
        System.out.println("方法成功返回執行");
    }

    @Around("log()")
    public void AroundLog(ProceedingJoinPoint joinpoint){
        System.out.println("方法以前執行");
        joinpoint.proceed();  //執行業務代碼
        System.out.println("方法以後執行");
    }
}

就是這麼簡單,一個簡單的POJO加上一個@Aspect ,定義一個或者多個切點(pointcut).N個通知方法(advice).

切點配合通知即是切面,切面即是AOP(在什麼位置,何時,作什麼)

相關文章
相關標籤/搜索