面向切面Spring學習之使用註解建立切面

2021-10-06 15:48:25 字數 2022 閱讀 4374

1.在spring中使用註解定義切面,我們會用到下面的註解:

註解通知

@aspect

它標識乙個類是乙個切面

@after

它標識的通知方法會在目標方法返回或丟擲異常後呼叫

@afterreturning

它標識的通知方法會在目標方法返回後呼叫

@afterthrowing

它標識的通知方法會在目標方法丟擲異常後呼叫

@around

通知方法會將目標方法封裝起來

@before

通知方法會在目標方法呼叫之前執行

我們知道切面由切點和通知構成。(切點定義在上篇boke中)

下面我們來學習乙個例子:

@aspect

//標識此類是乙個切面

public

class

audience

//標識次方法會在perform()執行之後執行

@afterreturning

("execution(** concert.performance.perform(..))"

)public

void()

}

2.上面的例子中標識每個方法我們都要寫一樣的切點表示式不免讓我們感覺有些繁瑣,我們可以通過下面的註解來簡化上面的**:

@pointcut 能在乙個@aspectj切面內定義可重用的切點。

有了它,上面的**可以寫成:

@aspect

//標識此類是乙個切面

public

class

audience

//它是乙個空方法,它主要是提供乙個標識

//標識次方法會在perform()方法執行之前執行

@before

("performance()"

)public

void

silencecellphones()

//標識次方法會在perform()執行之後執行

@afterreturning

("performance()"

)public

void()

}

可以大大簡化**量。

上面的**只是定義了乙個切面,如果就此止步的話,上面定義的類就只是spring容器的乙個bean,即使用了切面註解,它也不會被視為切面,這些註解不會解析,也不會建立將其轉換為切面的**。

//啟動aspectj自動**

@configuration

@enableaspectjautoproxy

@componentscan

public

class

concertconfig

}

這樣以後,我們的切面才會生效。

環繞通知是最為強大的通知型別,它能讓你所編寫的邏輯被通知的目標方法完全包裝起來。(實際上就像在乙個通知方法中同時編寫前置通知和後置通知)

我們使用@around來實現:

@aspect

//標識此類是乙個切面

public

class

audience

//它是乙個空方法,它主要是提供乙個標識

//標識環繞通知方法

@around

("performance()"

)public

void

watchperformance

(proceedingjoinpoint jp)

catch

(throwable e)

}}

我們可以看到,這個通知所達到的效果和前面的一樣,但是它們在這裡位於同乙個方法中,不像之前分散在幾個方法裡。

關於上面方法,我們發現多了乙個proceedingjoinpoint 型別的引數,這個物件必須要有的,因為它的作用就是通過它來呼叫被通知的方法,好讓我們的目標方法執行。

Spring學習之深入AOP面向切面程式設計

1 aop基本概念術語。切面 通知 切入點 引入 織入。切面,是指需要實現的交叉功能。是應用系統模組化的乙個俄切面或領域。切面最常見的例子是日誌記錄。乙個系統到處都需要日誌記錄,利用切面就能不侵入的情況下實現該功能。其實切面就是包含定義切面行為的通知和定義切面在什麼地方織入的切入點組成。通知,就是切...

Spring面向切面程式設計

1 面向切面程式設計 aop 的概念 把專案中需要在多處用到的功能,比如日誌 安全和事物等集中到乙個類中處理,而不用在每個需要用到該功能的地方顯式呼叫。2 術語解釋 橫切關注點 分布應用於多處的功能 切面 橫切關注點可以被模組化為乙個類,這個類被稱為乙個切面 通知 advice 切面要完成的工作。s...

Spring學習筆記 面向切面程式設計(AOP)

在軟體開發中,散布於應用中多處的功能被稱為橫切關注點 cross cutting concern 通常來講,這些橫切關注點從概念上來講應該與應用的業務邏輯相分離 但是往往會直接嵌入到應用的業務邏輯中 把橫切關注點與邏輯相分離正是面向切面程式設計 aop 所要解決的問題。切面實現了橫切關注點 跨多個應...