Spring AOP面向切面程式設計

2021-10-01 03:59:50 字數 3726 閱讀 9020

一.常用概念:

原有功能: 切點 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能夠將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任 例如事務處理 日誌管理 許可權控制等 封裝起來,便於減少系統的重複 降低模組間的耦合度,並有利於未來的可拓展性和可維護性。簡單例子 在某個專案裡,非管理員不能對某些業務進行操作,如下 從上面的 我們可以看出這種方式達到了許可權驗證的功能...