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