- Spring Boot進階:原理、實戰(zhàn)與面試題分析
- 鄭天民
- 437字
- 2022-07-05 09:41:47
3.2 動態(tài)代理機制與Spring AOP
在Java的世界中,實現(xiàn)AOP的主流方式是采用動態(tài)代理(Dynamic Proxy)機制,這點對于Spring AOP也一樣。代理機制的主要目的就是為其他對象提供一種代理以控制對當前對象的訪問,用于消除或緩解直接訪問對象帶來的問題。通過這種手段,一個對象就代表另一個對象的部分功能,我們創(chuàng)建包含當前對象的對象,以便向外界提供功能接口。本節(jié)將關注目前主流的動態(tài)代理實現(xiàn)技術,并分析Spring AOP中的代理實現(xiàn)方式。
在Spring中,采用的代理機制有兩種,即JDK動態(tài)代理和CGLIB動態(tài)代理。為了介紹動態(tài)代理機制,這里我們引入一個具體的應用場景。考慮一個Account接口,它包含一個用于圖片展示的open()方法,如代碼清單3-5所示。
代碼清單3-5 Account接口代碼
public interface Account{ void open(); }
然后針對該接口有一個實現(xiàn)類RealAccount,其中的方法實現(xiàn)只用于模擬,不包含具體業(yè)務,如代碼清單3-6所示。
代碼清單3-6 Account接口實現(xiàn)類代碼
public class RealAccount implements Account { private String name; public RealAccount(String name) { this.name = name; } @Override public void open() { System.out.println("Open the account for:" + name); } }
現(xiàn)在,假設需要在執(zhí)行RealAccount的open()方法的前后分別打印日志信息。我們接下來討論如何分別基于JDK動態(tài)代理和CGLIB動態(tài)代理來實現(xiàn)這一目標。
推薦閱讀
- Spring 5企業(yè)級開發(fā)實戰(zhàn)
- Visual C++實例精通
- NLTK基礎教程:用NLTK和Python庫構建機器學習應用
- Learning Apache Kafka(Second Edition)
- Procedural Content Generation for C++ Game Development
- Scratch3.0趣味編程動手玩:比賽訓練營
- Node.js區(qū)塊鏈開發(fā)
- SwiftUI極簡開發(fā)
- Java程序設計教程
- AngularJS UI Development
- VMware vSphere Design Essentials
- Mobile Test Automation with Appium
- 新手學ASP.NET 3.5網(wǎng)絡開發(fā)
- Windows 10 for Enterprise Administrators
- A/B 測試:創(chuàng)新始于試驗