概念
Aspect-Oriented Programming(AOP):想想OOP是不是有些熟悉,AOP翻譯過來的意思就是面向切面編程。先來關(guān)注一下涉及到的以下幾個概念點。
橫切關(guān)注點:
存在于項目的絕大多數(shù)業(yè)務(wù)中可以通用的一些輔助性的功能。例如日志、安全、持久化等模塊。它們存在于核心業(yè)務(wù)代碼塊的各個地方,卻又獨立于這些核心業(yè)務(wù)邏輯。
如圖所示:Paste_Image.png
切面:
這些橫切關(guān)注點的統(tǒng)一抽象。所以面向切面編程,就是將項目的輔助性功能(如日志、異常處理、緩存處理等)與業(yè)務(wù)邏輯進行分離,把繁瑣的輔助性代碼抽離出來不用重復(fù)Copy,使得程序具備更高的模塊化。
實現(xiàn)方式
靜態(tài)織入
即編譯時織入,實現(xiàn)原理是對編譯器做擴展,使得在代碼編譯時編譯器將切面代碼織入到指定的切點。動態(tài)織入
即運行時織入,編譯器在編譯時對切面代碼和業(yè)務(wù)代碼分別獨立編譯,而在運行的時候由CLR進行代碼混合。