AOP 面向切面程式設計 (一) 入門例項

2021-09-17 20:05:54 字數 2027 閱讀 4265

aop(面向切面程式設計)通過預編譯方式和執行期動態**實現程式功能的統一維護的一種技術。aop是oop的延續,是軟體開發中的乙個熱點,也是spring框架中的乙個重要內容,是函式式程式設計的一種衍生范型。利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。

可以通過預編譯方式和執行期動態**實現在不修改源**的情況下給程式動態統一新增功能的一種技術。aop實際是gof設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,提高**的靈活性和可擴充套件性,aop可以說也是這種目標的一種實現。

主要用於日誌記錄,效能統計,安全控制,事務處理,異常處理等方面。

本例項使用springboot框架,首先我們寫乙個計算三角函式的介面和實現:

public inte***ce trigonometricfunctioncal
@component

public class trigonometricfunctioncalimpl implements trigonometricfunctioncal

@override

public double sin(double angle)

@override

public double cos(double angle)

@override

public double tan(double angle)

}

寫乙個切面類

@aspect

@component

public class testaop

/*** 前置通知,目標方法呼叫前被呼叫

* @param joinpoint

*/@before("executepackage()")

public void beforeadvice(joinpoint joinpoint)

/*** 後置最終通知,目標方法執行完執行

*/@after("executepackage()")

public void afteradvice()

/*** 後置返回通知

* 如果引數中的第乙個引數為joinpoint,則第二個引數為返回值的資訊

* 如果引數中的第乙個引數不為joinpoint,則第乙個引數為returning中對應的引數

* returning 只有目標方法返回值與通知方法相應引數型別時才能執行後置返回通知,否則不執行

* @param joinpoint

* @param keys

*/@afterreturning(value = "executepackage()",returning = "keys")

public void afterreturningadvice(joinpoint joinpoint,double keys)

/*** 環繞通知:

* 可以決定目標方法是否執行,什麼時候執行,執行時是否需要替換方法引數,執行完畢是否需要替換返回值。

* 環繞通知第乙個引數必須是org.aspectj.lang.proceedingjoinpoint型別

*/@around("execution(* com.way.inter.impl.trigonometricfunctioncalimpl.sin(..))")

public object aroundadvice(proceedingjoinpoint proceedingjoinpoint) catch (throwable throwable) finally

return null;}}

測試類:

@runwith(springrunner.class)

@springboottest

public class test1

}

執行結果:

aop 面向切面程式設計

起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...

AOP面向切面程式設計

1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...

AOP 面向切面程式設計

aop aspect oriented programming 即面向切面程式設計,可以說是oop object oriented programming 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...