1.點睛:
aop:面向切面程式設計,相對于oop面向對象程式設計。
spring的aop的存在目的是為了解耦。aop可以讓一組類共享相同的行為。在oop中隻能通過繼承類和實作接口,來使代碼的耦合度增強,aop彌補了oop的不足。
spring支援aspectj的注解式切面程式設計。
(1)使用@aspectj聲明是一個切面。
(2)使用@after、@before、@around定義建言(advice),可直接将攔截規則(切點)作為參數。
(3)其中@after、@before、@around參數的攔截規則為切點(pointcut),為了使切點複用,可使用@pointcut專門定義攔截規則,然後在@after、@before、@around的參數中調用。
(4)其中符合條件的每一個被攔截處為連接配接點(jointpoint)
示例将示範基于注解攔截和基于方法規則攔截兩種方式,示範一種模拟記錄操作的日志系統的實作。其中注解式攔截能夠很好地控制要攔截的粒度和獲得更豐富的資訊,spring本身在事務處理(@transcational)和資料緩存(@cacheable等)上面都使用此種形式的攔截。
2.示例
(1)添加spring aop支援及aspectj依賴

(2)編寫攔截規則的注解
注解本身是沒有功能的,就和xml一樣。注解和xml都是一種中繼資料,中繼資料即解釋資料的資料,這就是所謂配置。
注解的功能來自用這個注解的地方。
(3)編寫使用注解的被攔截類
(4)編寫使用方法規則被攔截類
(5)編寫切面
通過@aspect注解聲明一個切面
通過@component讓此切面成為spring容器管理的bean
通過@pointcut注解聲明切點
通過@after注解聲明一個建言,并使用@pointcut定義的切點
通過反射可獲得注解上的屬性,然後做日志記錄相關的操作,下面的相同
通過@before注解聲明一個建言,此建言直接使用攔截規則作為參數
(6)配置類
使用@enableaspectjautoproxy注解開啟spring對aspectj的支援
(7)運作
結果: