這篇文章主要介紹了Java的Spring框架下的AOP的作用,需要的朋友可以參考
假如沒有aop,在做日誌處理的時候,我們會在每個方法中添加日誌處理,例如
但大多數的日子處理程式碼是相同的,為了實現程式碼重複使用,我們可能把日誌處理抽離成一個新的方法。但是這樣我們仍然必須手動插入這些方法。
但這樣兩個方法就是強耦合的,假如此時我們不需要這個功能了,或者想換成其他功能,那麼就必須一個個修改。
透過動態代理,可以在指定位置執行對應流程。這樣就可以將一些橫向的功能抽離出來形成一個獨立的模組,然後在指定位置
插入這些功能。這樣的思想,稱為面向切面編程,亦即AOP。
為了在指定位置執行這些橫向的功能,需要知道指定的是什麼地方
例如上圖,方法層級的aop實現,在一個程式執行鏈條中,把methodJAVA中Spring Aop作用詳解稱為切點,也就是說在methodJAVA中Spring Aop作用詳解執行時會執行橫切的功能,那麼是在methodJAVA中Spring Aop作用詳解之前還是之後呢,又是執行什麼呢?這些都由advice(通知)來指定。 advice有JAVA中Spring Aop作用詳解種類型,分別是
在通知類型 簡介
Before(前置通知) 目標方法呼叫之前執行
#After(後置通知) 目標方法呼叫之後執行
After-returning(回傳通知) 目標方法執行成功後執行
After-throwing (異常通知) 目標方法拋出異常後執行
Around(環繞通知) 相當於合併了前置和後置
@Aspect @Component public class UserAspect { @Before("execution(* com.aop.service.impl.UserServiceImpl.login(..))") public void loginLog(){ System.out.println("user login"); } }使用註解@Aspect將某個特定的類別宣告為切面,這樣,該類別下的方法就可以宣告為橫向的功能點後插入到指定位置。使用execution表達式宣告在這個切點,格式如下 第一個位置指定了方法的回傳值,*號代表任意型別的傳回值,然後是所在的類別和方法名,*號同樣代表任意,就是該類別中任意的方法,在上一個範例中方法名稱是login,則是指定了該類別中的login方法。然後最後一個參數是方法入參,因為Java中支援重載,所以這個參數可以幫助你更精確的進行定位。兩點表示任意參數類型。這樣,execution表達式告訴了程式該在何地執行通知。而被諸如@Before註解修飾的方法就是通知的內容,也就是做什麼。 至此,我們就可以使用spring aop,但是還有兩點需要得到注意將切面類別宣告為一個bean
以上是JAVA中Spring Aop作用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!