亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Spring AOP(面向切面)

1. 前言

大家好,本小節重點介紹一個新知識 —— AOP 。作為入門的第一小節,我們需要理解 AOP 的概念,了解 AOP 的專業術語,明白它的作用。

那么,到底什么是 AOP ,它存在的意義是什么,在開發中扮演了一個什么樣的角色呢?

隨著疑問,開始本小節的內容。

2. 概述

2.1 AOP 的概念

AOP 并不是 Spring 框架的專屬名稱,它的全稱是 Aspect Oriented Programming ,意為:面向切面編程。

它是 OOP 的一個延續,通過預編譯的方式和運行期間動態代理實現程序功能的統一維護的一種技術。

名詞解釋:

面向切面編程:

? 其實切面是數學中的一個概念,表示只有一個點接觸到球體的一個平面稱呼為切面,而接觸點稱呼為切點。那么在 Spring 中,切面編程指的是什么呢?

就是在程序運行某個方法的時候,不修改原始執行代碼邏輯,由程序動態地執行某些額外的功能,對原有的方法做增強,這就叫做面向切面編程。

那個被監測的執行方法,稱之為切入點。

2.2 AOP 的意義

我們明白了 AOP 的概念,它是一種編程設計模式,是一種編程技術,那么為什么在程序中使用它呢?

  1. Spring 框架的中心宗旨之一是非侵入性,使用 AOP 可以很方便地在某些場景實現特定的功能,通過修改配置即可以實現增加或者去除某些附加功能;
  2. AOP 設計的功能代碼可以復用,代碼耦合性更低,代碼更加整潔;
  3. 使用 Spring 提供的 AOP ,讓我們更加注重業務代碼實現本身,而無需關注底層設計模式與實現方式。

3. 術語解釋

3.1 Join point(連接點)

所謂連接點是指那些被攔截到的點。在 Spring 中這些點指的是方法,可以看作正在訪問的,或者等待訪問的那些需要被增強功能的方法。Spring 只支持方法類型的連接點。

3.2 Pointcut(切入點)

所謂切入點是一個規則,定義了我們要對哪些 Joinpoint 進行攔截。因為在一個程序中會存在很多的類,每個類又存在很多的方法,而哪些方法會應用 AOP 對該方法做功能增強呢?

這就需要依據我們配置的切入點規則。

3.3 Advice(通知)

所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知。 也就是對方法做的增強功能。

通知分類

  1. 前置通知:在連接點之前運行的通知類型,它不會阻止流程進行到連接點,只是在到達連接點之前運行該通知內的行為,當然 -—— 除非它引發異常;
  2. 后置通知:在連接點正常完成后要運行的通知,正常的連接點邏輯執行完,會運行該通知,當然 —— 方法正常返回而沒有引發異常;
  3. 最終通知:無論連接點執行后的結果如何,正常還是異常,都會執行的通知;
  4. 異常通知:如果連接點執行因拋出異常而退出,則執行此通知;
  5. 環繞通知:環繞通知可以在方法調用之前和之后執行自定義行為。

3.4 Target (目標)

Target 指的是代理的目標對象,更通俗的解釋就是:AOP 對連接點方法做增強,底層是代理模式生成連接點所在類的代理對象,那么連接點所在的類,就是被代理的類稱呼為 Target。

3.5 Aspect(切面)

切面本質是一個類,只不過是個功能類,作為整合 AOP 的切入點和通知。一般來講,需要在 Spring 的配置文件中配置,或者通過注解來配置。

3.6 Weaving(織入)

織入是一種動作的描述,在程序運行時將增強的功能代碼也就是通知,根據通知的類型(前綴后綴等…)放到對應的位置,生成代理對象。

3.7 Proxy(代理)

一個類被 AOP 織入增強后,產生的結果就是代理類

4. 小結

本小節主要是 AOP 的入門介紹,那么重點給大家講述了 AOP 的概念、意義、以及常見術語。

當然對于初學者而言,文字描述略顯蒼白和枯燥,而我們本小節目的也是給大家做個鋪墊,

對一些名詞做個解釋和介紹,以便后續測試案例的講解。