spring中aop的概念「什麼是spring框架的aop」

我工作遇到的第一個問題就是用 Spring AOP 解決的。Spring AOP 真正用起來的時候很少,但是無一不是解決重要問題。用一種輕鬆的手法解決了重要的問題,Spring AOP 做到了。

Spring AOP 的登場

在工作中經常會遇到維護老 WEB 項目的任務,老項目有很多問題,其中一個就是沒有日誌系統,出現問題,排查困難。當時我的任務就是給老項目增加日誌。按理來說,增加日誌不難,增加 Log4j 依賴,填好配置。在每個 Controller 類和 Server 類里創建日誌對象,然後在關鍵位置上加上日誌打印就行。

問題在於,項目已經寫好了,總共大好幾千的方法一個個加日誌打印,人要累吐血,而且這屬於重複工作,太痛苦了。於是就想到了使用 Spring AOP 添加日誌,果然輕易的解決了問題。

什麼是 Spring AOP

現在進入正題,首先介紹什麼是 Spring AOP。官方介紹是面向切面編程。首先這是一種編程思想,基於面向對象編程(OOP)的一種補充。面向對象編程思想是指萬物皆對象。處理對象的過程叫方法,面向切面編程就是指把方法看成一個整體,在不改變方法原代碼的情況下改變方法執行過程。

打個比方就是番茄夾梅子。先把番茄切開,裡面放一個梅子,然後把番茄合上,番茄還是那個番茄,沒有變,但是裡面有了梅子的味道。在物理層面,番茄已經改變了,裡面多了個梅子。但是變成代碼的時候,我們可以在不改變方法源代碼的情況下,改變方法運行邏輯。

什麼是Spring的AOP特性?

Spring AOP 原理

這種神奇的效果是怎麼實現的呢?這個要歸功於 23 種設計模式中的代理模式。要理解面向切面編程的原理,必須要先理解代理模式。

代理模式理解起來很簡單,打個比方就明白了。比如說你是彭于晏(讀者人均彭于晏),但是你只專註於表演這個能力,只能拿到演戲的錢。現在你特別出名,好多公司找你做代言人。但是你沒空去洽談。這個時候你就需要一個經紀人,經紀人會幫你接代言,幫你管理粉絲,幫你接戲。你的工作還是沒變,但是收入增加了。

在這個過程中,“彭于晏”代表的是原生對象。而全權代表“彭于晏”的經紀人被稱為代理對象。當我需要“彭于晏”表演的時候,我去找經紀人。這個過程就是代理模式。

流程圖:

什麼是Spring的AOP特性?

代理模式的兩種常見實現方法:動態代理、靜態代理

先說靜態代理:靜態代理的優點是,好理解,好觀察。缺點是難維護,死板。不適合在動態的項目需求中使用。
簡易版靜態代理:

什麼是Spring的AOP特性?
什麼是Spring的AOP特性?
什麼是Spring的AOP特性?

這就是靜態代理,目標對象和代理對象都需要實現自己的父類方法。一旦父類增加或修改了,需要在所有子類中一起變動,維護十分困難。所以一般在項目中很少使用靜態代理。

再說動態代理:動態代理的優點是:好使用,好維護。缺點是:不好理解,不好觀測。現在上代碼:
簡易版動態代理:接口部分不變,“彭于晏”部分不變

什麼是Spring的AOP特性?

注意接下來的代理對象

什麼是Spring的AOP特性?
什麼是Spring的AOP特性?

所謂動態代理就是借用反射來創建代理對象,借用反射來創建代理對象的好處就是通用性極高。這樣就避免了上層接口改變,代理對象也要修改代碼這一蛋疼行為。

Spring AOP 上手使用

現在明白了 Spring AOP 是幹啥的,接下來展示,Spring AOP 在實際項目中的使用。Spring AOP 已經實現了自動創建動態代理,我們只需要學會正確調用即可。

圖文展示:

第一步:導入 Spring AOP 依賴

什麼是Spring的AOP特性?

PS:加入新依賴後要更新依賴

第二步:使用切面註解@Aspect

什麼是Spring的AOP特性?

切面:定義當前類是切面類,需要給每一個滿足切麵條件的類生成不同的代理對象。

第三步:定義需要的通知。

什麼是Spring的AOP特性?

通知:通知就是定義代理對象的代碼要在什麼時候生效。

以下是常用通知類型,可以根據實際需要選用通知

什麼是Spring的AOP特性?

第四步:填寫需要的切面表達式

什麼是Spring的AOP特性?

切面表達式:定義了滿足什麼條件就去生成其代理類。

整理常用切點表達式:

什麼是Spring的AOP特性?

執行結果:

什麼是Spring的AOP特性?

Spring AOP 的優勢和缺點

Spring AOP 的優勢很明顯,在不改變原代碼的情況下,加入新的邏輯代碼。缺點是,邏輯不連貫,閱讀體驗不好。畢竟這是專門為解決特定問題而出現的專用工具。

我們應該有一個意識,當我們需要批量給方法新增邏輯的時候,要能想起 Spring AOP。

Java 裡面概念很多,知識點也很多。很多概念和知識點是專為解決特定問題而誕生的,我們不可能記住全部知識點,但是在需要用到一個知識點的時候,要能想起什麼知識點能解決這個問題,在不斷地遇到問題,解決問題的過程中,我們對這些知識點的理解自然會更深刻,但是不要停止腳步,要多想原理和為什麼,這是通往架構師的道路。

Spring AOP 總結

回顧一下本章重點:

AOP 是一種編程思想——面向切面編程

AOP 實現原理——代理模式。代理模式分為動態代理和靜態代理。

Spring AOP 使用步驟:1.導入依賴。2.使用切面注釋。3.使用通知注釋。4.使用切點申明表達式。

都看到這裡了。英俊瀟洒的小哥哥,貌美如花小姐姐,看完記得順手點贊。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/249955.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-13 13:28
下一篇 2024-12-13 13:28

相關推薦

發表回復

登錄後才能評論