一.常用概念:
原有功能: 切點 pointcut
前置通知: 在切點之前執行的功能, before advice
後置通知: 在切點之後執行的功能, after advice
異常通知: 如果切點執行過程**現異常,則觸發異常通知 throws advice
切面: 所有功能的總稱
織入:把切面嵌入到原有功能的過程叫織入
二.spring提供了兩種aop實現方式
2.1 schema-based
2.1.1: 每個通知必須實現介面或類
2.1.2:配置spring檔案時在中配置
2.2 aspectj
2.2.1: 每個通知不需要實現介面或類
2.2.2: 配置spring檔案時在中的子標籤配置
三. schema-based 實現步驟
匯入jar包
新建通知類
2.1 前置通知類
2.1.1method method: 切點方法物件(反射)
2.1.2object args: 切點方法引數陣列
2.1.3object target: 切點類物件
public
class
mybeforeadvice
implements
methodbeforeadvice
}
2.2後置通知類
2.2.1object returnvalue: 切點方法返回值
2.2.2method method: 切點方法物件(反射)
2.2.3object args: 切點方法引數陣列
2.2.4object target: 切點類物件
public
class
myafteradvice
implements
afterreturningadvice
}
3.配置spring配置檔案
<
!-- 前置通知類 --
>
"mybeforeadvice"
class
="com.mlj.springstudy.mybeforeadvice"
>
<
/bean>
<
!-- 後置通知類 --
>
"myafteradvice"
class
="com.mlj.springstudy.myafteradvice"
>
<
/bean>
<
!-- 切點類 --
>
"demo"
class
="com.mlj.springstudy.demo"
>
<
/bean>
<
!-- aop配置 --
>
<
!-- 配置切點 --
>
"execution(* com.mlj.springstudy.demo.demo2())" id=
"mypoint"
/>
<
!-- 配置通知 --
>
"mybeforeadvice" pointcut-ref=
"mypoint"
/>
"myafteradvice" pointcut-ref=
"mypoint"
/>
<
/aop:config>
三,配置異常通知步驟(aspectj方式)
1.只有當切入點出現異常時才會觸發異常通知
2.在spring中只有aspectj提供了異常通知的方法
3.實現步驟
3.1 新建異常通知類(不需要實現介面)
public
class
mythrowsadvice
}
3.2 在spring配置檔案中配置
<
!-- 切入點類 --
>
"demo"
class
="com.mlj.springstudy.demo"
>
<
/bean>
<
!-- 異常通知類 --
>
"mythrowsadvice"
class
="com.mlj.springstudy.mythrowsadvice"
>
<
/bean>
<
!-- 配置aop --
>
"mythrowsadvice"
>
<
!-- 切入點 --
>
"execution(* com.mlj.springstudy.demo.*(..))" id=
"mypoint"
/>
<
!-- 異常通知 --
>
"myexcution" pointcut-ref=
"mypoint" throwing=
"e"/
>
<
/aop:aspect>
<
/aop:config>
四,環繞通知(schema-based)
1.新建環繞通知類
import org.aopalliance.intercept.methodinterceptor;
import org.aopalliance.intercept.methodinvocation;
public
class
myarroud
implements
methodinterceptor
}
2.在spring配置檔案中配置
<
!-- 切點類 --
>
"demo"
class
="com.mlj.springstudy.demo"
>
<
/bean>
<
!-- 環繞通知類 --
>
"myarroud"
class
="com.mlj.springstudy.myarroud"
>
<
/bean>
<
!-- 基於schema-base配置 --
>
"execution(* com.mlj.springstudy.demo.*(..))" id=
"mypointcut"
/>
"myarroud" pointcut-ref=
"mypointcut"
/>
<
/aop:config>
Spring AOP 面向切面程式設計
spring aop aop aspect orient programming 也就是面向切面程式設計 可以這樣理解,物件導向程式設計 oop 是從靜態角度考慮程式結構,面向切面程式設計 aop 是從動態角度考慮程式執行過程。在日常生活中,會遇到各種各樣的中介機構,比如獵頭公司,律師事務所,婚姻介...
Spring AOP面向切面程式設計
最近在系統中需要實現使用者某些操作新增積分,希望實現對系統現有的 進行最小嵌入,因此使用spring aop的切面程式設計將很好實現該需求,達到最小耦合度。在spring aop中的通知都是針對方法層級進行通知,相對與struct中針對類層級通知,具有更好的靈活性。方法攔截 methodinterc...
Spring AOP 面向切面程式設計)
aop能夠將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任 例如事務處理 日誌管理 許可權控制等 封裝起來,便於減少系統的重複 降低模組間的耦合度,並有利於未來的可拓展性和可維護性。簡單例子 在某個專案裡,非管理員不能對某些業務進行操作,如下 從上面的 我們可以看出這種方式達到了許可權驗證的功能...