aop也發展了不久了,雖然在工作上也一直在用,不過畢竟沒有深入了解過,停留在概念上的理解,和使用的階段上。這篇主要講講,aop如何正確的使用它。
首先需要知道,目前畢竟流行的aop框架,上篇文章也介紹了aop實現的原理,對spring這個大家庭來說,它的aop遠遠沒有這麼簡單。目前使用畢竟多的
幾種方式如下:
區別:spring aop採用的動態織入,而aspectj是靜態織入。靜態織入:指在編譯時期就織入,即:編譯出來的class檔案,位元組碼就已經被織入了。動態織入又分靜動兩種,靜則指織入過程只在第一次呼叫時執行;動則指根據**動態執行的中間狀態來決定如何操作,每次呼叫target的時候都執行。有不清楚的同學,可以自己補下基礎的**知識。
aop的一些術語
pointcut: 是乙個(組)基於正規表示式的表示式,有點繞,就是說他本身是乙個表示式,但是他是基於正則語法的。通常乙個pointcut,會選取程式中的某些我們感興趣的執行點,或者說是程式執行點的集合。"execution(public * cn.com.sinodata..*.*controller.*(..))"
joinpoint: 通過pointcut選取出來的集合中的具體的乙個執行點,我們就叫joinpoint.
advice: 在選取出來的joinpoint上要執行的操作、邏輯。
aspect: 就是我們關注點的模組化。這個關注點可能會橫切多個物件和模組,事務管理是橫切關注點的很好的例子。它是乙個抽象的概念,從軟體的角度來說是指在應用程式不同模組中的某乙個領域或方面。由pointcut 和 advice組成。
target:被aspectj橫切的物件。我們所說的joinpoint就是target的某一行,如方法開始執行的地方、方法類呼叫某個其他方法的**。
aspect一般放在處理aop最上面,我們把需要處理的aop業務放在這個類裡面,由
pointcut 和 advice組成。
pointcut 用類似正規表示式選擇需要進行aop的集合,joinpoint是針對pointcut 具體執行的乙個點。而advice則是具體需要做什麼,
advice的引數需要和pointcut的方法名一致。
有四種型別。
1:before advice 在方法執行前執行。
2:after returning advice 在方法執行後返回乙個結果後執行。
3:after throwing advice 在方法執行過程中丟擲異常的時候執行。
4:around advice 在方法執行前後和丟擲異常時執行,相當於綜合了以上三種通知。
一般 around 就行了。
Springboot如何使用AOP
切面的包 1 springboot 不自帶aop 需要自己新增依賴 org.springframework.bootgroupid spring boot starter aopartifactid dependency 2 直接 aspect寫切面類就行了1 連線點 可以理解為需要被增強的方法 2...
如何正確使用記憶體
如何正確使用記憶體 對於初學者來說,記憶體是個神秘的空間。程式的絕大部分錯誤,也是在於記憶體的使用不當造成的,而且這些錯誤有些都是隱藏很深的。所以,如何掌握記憶體的使用,通曉系統對記憶體的管理手段,將是軟體成功的乙個非常關鍵的因素。首先我們要了解記憶體的分配方式。一般來說,記憶體的分配方式有三種 1...
如何正確使用列舉
列舉型別,對程式設計師來說再熟悉不過了,但是,你確定你在正確得使用它嗎?在用列舉之前,讓我們來區分一下狀態和選項這兩個概念。那麼,我們怎麼使用列舉來定義狀態和選項呢?不好的寫法 你可能經常見到的寫法 define status fail 0 define status success 1 用int變...