通過案例理解Spring中靜態(tài)代理
參考http://m.fzitv.net/program/3545702mr.htm
無論是靜態(tài)代理還是動態(tài)代理,都有四大角色:
- 抽象角色:一般會使用接口或者抽象類來解決
- 真實角色:被代理的角色
- 代理角色:代理真實角色,一般會做一些附屬操作
- 客戶:訪問代理對象的人
中介租房案例
首先,定義一個接口(Rent),房東類(Host)實現(xiàn)該接口,并輸出自己房子的相關信息。
//租房
public interface Rent {
public void rent();
}
//房東
public class Host implements Rent{
public void rent() {
System.out.println("我的房子是藍色的,準備出租房子!");
}
}
房東將房子交給中介,此時的中介相當于代理類(Proxy)
代理類在不修改被代理對象功能 (Host類的rent方法) 的基礎上,可以對代理類進行擴展(增加seeHouse、fare方法)
public class Proxy implements Rent{
private Host host;
public Proxy(){ }
public Proxy(Host host){
this.host=host;
}
public void rent() {
seeHouse();
host.rent();
fare();
}
//看房
public void seeHouse(){
System.out.println("中介帶你看房子");
}
}
//收費
public void fare(){
System.out.println("收中介費");
}
}客戶購房不用面對房東,只需與中介對接。
public class Client {
public static void main(String[] args) {
Host host=new Host(); //房東要出租房子
//代理,中介幫房東租房子,但是代理角色一般會有一些附屬操作
Proxy proxy=new Proxy(host);
//客戶不用面對房東,直接找中介租房即可
proxy.rent();
}
}
上述代碼就實現(xiàn)了靜態(tài)代理,客戶只需面向代理類操作即可。
運行截圖

缺點:靜態(tài)代理中,每個真實對象都會擁有一個代理類,這樣將會十分繁瑣。
如果采用靜態(tài)代理,當有100個房東時,我們將要編寫100個代理類,這種處理方法明顯不妥。因此我們可以使用動態(tài)代理,編寫一個代理工具類,該類并未指明代理的真實對象是哪一個。
public class DynamicProxy {
public static Object getProxyInstance(Object target){
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
(proxy, method, args)->{
Object result = method.invoke(target,args);
return result;
}
);
}
}public class Client {
public static void main(String[] args) {
Rent proxyInstance1 = (Rent) DynamicProxy.getProxyInstance(
new Host1());
proxyInstance1.rent();
Rent proxyInstance2 = (Rent)DynamicProxy.getProxyInstance(
new Host2());
proxyInstance2.rent();
}
}到此這篇關于通過案例理解Spring中靜態(tài)代理的文章就介紹到這了,更多相關Spring靜態(tài)代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Java編寫一個PDF與Word文件轉(zhuǎn)換工具
前段時間一直使用到word文檔轉(zhuǎn)pdf或者pdf轉(zhuǎn)word,尋思著用Java應該是可以實現(xiàn)的,于是花了點時間寫了個文件轉(zhuǎn)換工具,感興趣的可以了解一下2023-01-01
SpringBoot實現(xiàn)不同用戶不同訪問權限的示例代碼
這篇文章主要介紹了在SpringBoot中使用SpringSecurity實現(xiàn)基于角色的權限控制,涵蓋依賴添加、數(shù)據(jù)庫設計、實體類與Repository接口、UserDetailsService實現(xiàn)、安全配置、控制器創(chuàng)建及測試數(shù)據(jù)準備,并提及@PreAuthorize注解與角色繼承配置,需要的朋友可以參考下2025-07-07
Springboot+MultipartFile實現(xiàn)單文件,多文件批量上傳過程
在Spring?Boot中,若需Swagger顯示文件上傳按鈕,需使用@Consumes注解指定Content-Type(如multipart/form-data),以告知接口接受文件類型,此注解幫助Swagger正確識別請求參數(shù),確保功能展示完整2025-07-07

