首頁  >  文章  >  Java  >  JAVA中Spring Aop作用詳解

JAVA中Spring Aop作用詳解

Y2J
Y2J原創
2017-04-28 09:52:591473瀏覽

這篇文章主要介紹了Java的Spring框架下的AOP的作用,需要的朋友可以參考

假如沒有aop,在做日誌處理的時候,我們會在每個方法中添加日誌處理,例如

JAVA中Spring Aop作用詳解

但大多數的日子處理程式碼是相同的,為了實現程式碼重複使用,我們可能把日誌處理抽離成一個新的方法。但是這樣我們仍然必須手動插入這些方法。

JAVA中Spring Aop作用詳解

但這樣兩個方法就是強耦合的,假如此時我們不需要這個功能了,或者想換成其他功能,那麼就必須一個個修改。

透過動態代理,可以在指定位置執行對應流程。這樣就可以將一些橫向的功能抽離出來形成一個獨立的模組,然後在指定位置

插入這些功能。這樣的思想,稱為面向切面編程,亦即AOP。

JAVA中Spring Aop作用詳解

為了在指定位置執行這些橫向的功能,需要知道指定的是什麼地方

JAVA中Spring Aop作用詳解

例如上圖,方法層級的aop實現,在一個程式執行鏈條中,把methodJAVA中Spring Aop作用詳解稱為切點,也就是說在methodJAVA中Spring Aop作用詳解執行時會執行橫切的功能,那麼是在methodJAVA中Spring Aop作用詳解之前還是之後呢,又是執行什麼呢?這些都由advice(通知)來指定。 advice有JAVA中Spring Aop作用詳解種類型,分別是

在通知類型 簡介

Before(前置通知) 目標方法呼叫之前執行

#After(後置通知) 目標方法呼叫之後執行

After-returning(回傳通知) 目標方法執行成功後執行

After-throwing (異常通知) 目標方法拋出異常後執行

Around(環繞通知) 相當於合併了前置和後置

##把切點和通知合在一起就是切面了,一個切面指定了在何時何地執行何種方法。在spring aop中如此定義這個切面:

@Aspect
@Component
public class UserAspect {
  @Before("execution(* com.aop.service.impl.UserServiceImpl.login(..))")
  public void loginLog(){
    System.out.println("user login");
  }
}

使用註解@Aspect將某個特定的類別宣告為切面,這樣,該類別下的方法就可以宣告為橫向的功能點後插入到指定位置。使用execution表達式宣告在這個切點,格式如下

JAVA中Spring Aop作用詳解

第一個位置指定了方法的回傳值,*號代表任意型別的傳回值,然後是所在的類別和方法名,*號同樣代表任意,就是該類別中任意的方法,在上一個範例中方法名稱是login,則是指定了該類別中的login方法。然後最後一個參數是方法入參,因為Java中支援重載,所以這個參數可以幫助你更精確的進行定位。兩點表示任意參數類型。這樣,execution表達式告訴了程式該在何地執行通知。而被諸如@Before註解修飾的方法就是通知的內容,也就是做什麼。

至此,我們就可以使用spring aop,但是還有兩點需要得到注意

將切面類別宣告為一個bean


切點指定的方法所在的類別也同樣需由spring注入才能生效

以上是JAVA中Spring Aop作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn