使用代理模式實現Spring AOP的面向切面編程,動態代理的四種增強處理

什麼是代理類?
代理就是代替我們去執行一些額外的工作。

目標類:只有核心功能的類

比如我們在寫service的時候,調用dao方法是我們的核心業務而service類中的日誌記錄,事務處理,異常處理等都屬於額外的功能,每個service方法中都要寫一次這些額外功能也會造成大量代碼的冗餘,

而面向切面編程的意思就是說把這些公共的、額外的代碼功能抽取出來,每個service裏面只寫我們的核心業務,這樣就提高了我們的開發效率。

爲什麼代理類和目標類要實現相同的接口?
1.從代碼的角度來說,代理類對象能夠賦值給接口類型的變量
2.要保證代理類和目標類有相同的功能

有了代理類:
程序員可以只關心核心功能

額外功能+目標類 =代理類

以上這種說法就是叫做靜態代理,
靜態代理就是在代碼編譯時,代理類已經存在
好處:程序員可以只關心核心功能
不好:多個代理類 , 沒有解決代碼冗餘的問題

什麼是動態代理?

運行時,動態創建出來代理對象
SpringAOP通過動態代理,讓程序猿只關心核心代碼,同時代碼不再冗餘

springAOP的開發步驟:
1.寫核心功能(目標類)
核心功能就是調用dao方法:
在這裏插入圖片描述
2.配置目標類
要在SpringApplication.xml文件中配置目標類所在路徑

 <!--配置目標類-->
    <bean id="bookService" class="com.macw.serviceImpl.bookServiceImpl">
        <property name="bookDao" ref="bookDao"></property>
    </bean>

3.寫額外功能(增強處理)
(公共功能:日誌處理/事務處理/異常處理/性能分析…) 等

前置增強(MethodBeforeAdvice):在覈心功能之前執行的額外功能
後置增強:在覈心功能之後執行的額外功能

環繞增強:在覈心功能之前以及之後執行的額外功能
異常增強:在覈心功能發生異常時執行的額外功能

前置增強的配置使用:
1,聲明一個類,需要實現 MethodBeforeAdvice接口:
在這裏插入圖片描述
2,spring配置文件中,配置聲明的增強功能類

	<!--額外功能-->
   <bean id="myBeforeAdvice" class="com.macw.advice.myBeforeAdvice"></bean>

3,在spring配置文件中,通過aop標籤做配置(需要添加aop命名空間以及schema驗證文檔):
.在哪些方法上面做增強處理
.在需要增強處理的方法上面,加哪個增強處理
在這裏插入圖片描述
4.讓spring在運行的時候,幫我們創建代理對象()
在這裏插入圖片描述

詳解advice
MethodBeforeAdvice前置增強的before方法

實現MethodBeforeAdvice接口必須要要實現before方法,這個方法有三個參數,
arg0:目標方法,
arg1:目標方法參數,
arg2:目標類,
在這裏插入圖片描述
2.AfterReturningAdvice:後置增強
在這裏插入圖片描述
3.ThrowsAdvice:異常增強
在這裏插入圖片描述
4.MethodInterceptor:環繞增強,目標方法執行之前以及之後做的增強處理
在這裏插入圖片描述
總結:
Spring AOP:Aspect Oriented Program 面向切面編程
幾個重要概念:

1.切入點:需要把增強處理加在的位置;service層的方法上面;需要在配置文件中配置
2.增強處理:額外功能(公共功能) ,通知/建議(advice)
3.目標類:核心功能所在的類(原始類)
4.切面:把增強處理,放在切入點的位置,形成的一個概念
5.編織/織入:把增強處理放置在切入點的過程

AOP使用場景:
1.把功能內容抽取出來,形成advice;在配置文件中中做配置====>程序猿只關心核心功能;解決冗餘
2.在原有功能基礎之上,做功能擴展===>在不改變原有代碼的基礎上做功能擴展

AOP實現:代理模式的使用

代理類的產生原理
類加載ClassLoader
在這裏插入圖片描述

代理類的生成:由jdk動態代理生成
在這裏插入圖片描述

SpringAOP實現原理:

1.底層通過字節碼技術,把目標對象以及額外功能動態封裝,生成代理對象 ==>動態代理
使用了JDK動態代理以及cglib動態代理
2.爲什麼通過id得到的是代理對象
spring工廠創建對象之後,由BeanPostProcessor進行處理
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章