這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Spring AOP 與代理的概念與使用方法,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括沿河網(wǎng)站建設(shè)、沿河網(wǎng)站制作、沿河網(wǎng)頁(yè)制作以及沿河網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,沿河網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到沿河省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!一、AOP 的基本概念
1.1 什么是 AOP
Aspect Oriented Programming,面向切面編程。
就跟我們說(shuō) OOP 是面向?qū)ο笠粯樱珹OP 是面向切面的。切面是分散在應(yīng)用中的一個(gè)標(biāo)準(zhǔn)代碼或功能。切面通常與實(shí)際的業(yè)務(wù)邏輯不同(例如,事務(wù)管理)。每個(gè)切面專(zhuān)注于一個(gè)特定的環(huán)切功能。
這里的切面呢,可以理解為橫切。比如在所有的 DAO 層方法上加上一個(gè)同樣的切面,功能是記錄日志;又或者在某個(gè)接口上應(yīng)用一個(gè)切面,作用是檢查權(quán)限。
AOP 是基于代理來(lái)實(shí)現(xiàn)的。而代理又分為靜態(tài)代理和動(dòng)態(tài)代理。兩者的區(qū)別在于代理類(lèi)于何時(shí)生成。
下面我們講講代理是怎么回事?
1.2 代理與 Spring AOP
代理分為靜態(tài)代理和動(dòng)態(tài)代理:
Spring AOP 原理:
Spring AOP 中默認(rèn)使用 JDK 動(dòng)態(tài)代理,通過(guò)反射獲取被代理的類(lèi),這個(gè)類(lèi)必須實(shí)現(xiàn)一個(gè)接口。如果目標(biāo)類(lèi)沒(méi)有實(shí)現(xiàn)接口,就會(huì)默認(rèn)使用 CGLIB Proxy 來(lái)動(dòng)態(tài)生成代理目標(biāo)類(lèi),后者是被代理類(lèi)的子類(lèi)。
可以通過(guò)獲取代理對(duì)象并打印的方式來(lái)查看其類(lèi)型(JDK Proxy 下是 com.sun.prxy, CGlib 下是子類(lèi).
AspectJ: 用特定的編譯器和語(yǔ)法,在編譯時(shí)增強(qiáng),實(shí)現(xiàn)了靜態(tài)代理技術(shù)。
1.3 Spring AOP 與 AspectJ 的區(qū)別
AspectJ 是一套完整的 AOP 解決方案,而 Spring AOP 并不是 —— 它只是在 Spring 框架下滿(mǎn)足其使用要求的一個(gè)解決方法,比如 Spring AOP 僅支持對(duì)方法使用切面。
二、靜態(tài)代理
2.1 AspectJ 靜態(tài)代理
基于特殊的編譯器和語(yǔ)法。這里不多介紹了。
IDEA 下編譯 AspectJ 可以參考這篇:https://blog.csdn.net/gavin_john/article/details/80156963
2.2 JDK 靜態(tài)代理
實(shí)際上是利用實(shí)現(xiàn)一個(gè)具體的代理類(lèi)來(lái)調(diào)用業(yè)務(wù)類(lèi)。代理類(lèi)持有了一個(gè)業(yè)務(wù)類(lèi)的引用。
更概況地說(shuō),JDK 靜態(tài)代理體現(xiàn)的是一種設(shè)計(jì)模式。
缺點(diǎn)很明顯,代碼冗余,難以維護(hù)。
這里以 借書(shū) 和 還書(shū) 這兩個(gè)行為來(lái)作為一個(gè)示例:
編寫(xiě)一個(gè) BookService 接口:
public interface BookService { boolean borrow(String id, String userName); boolean reBack(String id, String userName); }
網(wǎng)頁(yè)名稱(chēng):SpringAOP與代理的概念與使用方法-創(chuàng)新互聯(lián)
URL分享:http://www.chinadenli.net/article28/cesejp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈、ChatGPT、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容