最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)案例理解Spring中靜態(tài)代理

 更新時(shí)間:2025年12月09日 14:15:47   作者:qq_54867493  
文章介紹了靜態(tài)代理和動(dòng)態(tài)代理的概念,通過(guò)中介租房案例展示了代理模式的實(shí)現(xiàn),靜態(tài)代理中,每個(gè)真實(shí)對(duì)象都有一個(gè)對(duì)應(yīng)的代理類,這種方式在真實(shí)對(duì)象較多時(shí)會(huì)顯得繁瑣,動(dòng)態(tài)代理則通過(guò)代理工具類來(lái)處理,避免了為每個(gè)真實(shí)對(duì)象編寫代理類的問(wèn)題,感興趣的朋友跟隨小編一起看看吧

參考http://www.fzitv.net/program/3545702mr.htm

無(wú)論是靜態(tài)代理還是動(dòng)態(tài)代理,都有四大角色:

  1. 抽象角色:一般會(huì)使用接口或者抽象類來(lái)解決
  2. 真實(shí)角色:被代理的角色
  3. 代理角色:代理真實(shí)角色,一般會(huì)做一些附屬操作
  4. 客戶:訪問(wèn)代理對(duì)象的人

中介租房案例

首先,定義一個(gè)接口(Rent),房東類(Host)實(shí)現(xiàn)該接口,并輸出自己房子的相關(guān)信息。

//租房
public interface Rent {
    public  void rent();
}
//房東
public class Host implements Rent{
    public void rent() {
        System.out.println("我的房子是藍(lán)色的,準(zhǔn)備出租房子!");
    }
}

房東將房子交給中介,此時(shí)的中介相當(dāng)于代理類(Proxy)

代理類在不修改被代理對(duì)象功能 (Host類的rent方法) 的基礎(chǔ)上,可以對(duì)代理類進(jìn)行擴(kuò)展(增加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("中介帶你看房子");
    }
    }
    //收費(fèi)
    public void fare(){
        System.out.println("收中介費(fèi)");
    }
}

客戶購(gòu)房不用面對(duì)房東,只需與中介對(duì)接。

public class Client {
    public static void main(String[] args) {
        Host host=new Host(); //房東要出租房子
        //代理,中介幫房東租房子,但是代理角色一般會(huì)有一些附屬操作
        Proxy proxy=new Proxy(host);
        //客戶不用面對(duì)房東,直接找中介租房即可
        proxy.rent();
    }
}

上述代碼就實(shí)現(xiàn)了靜態(tài)代理,客戶只需面向代理類操作即可。

運(yùn)行截圖

缺點(diǎn):靜態(tài)代理中,每個(gè)真實(shí)對(duì)象都會(huì)擁有一個(gè)代理類,這樣將會(huì)十分繁瑣。

如果采用靜態(tài)代理,當(dāng)有100個(gè)房東時(shí),我們將要編寫100個(gè)代理類,這種處理方法明顯不妥。因此我們可以使用動(dòng)態(tài)代理,編寫一個(gè)代理工具類,該類并未指明代理的真實(shí)對(duì)象是哪一個(gè)。

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();
    }
}

到此這篇關(guān)于通過(guò)案例理解Spring中靜態(tài)代理的文章就介紹到這了,更多相關(guān)Spring靜態(tài)代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis執(zhí)行SQL的兩種方式小結(jié)

    MyBatis執(zhí)行SQL的兩種方式小結(jié)

    本文主要介紹了MyBatis執(zhí)行SQL的兩種方式小結(jié),主要包括SqlSession 發(fā)送SQL和SqlSession獲取Mapper接口,通過(guò)Mapper接口發(fā)送SQL,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Xml中使用foreach遍歷對(duì)象實(shí)現(xiàn)代碼

    Xml中使用foreach遍歷對(duì)象實(shí)現(xiàn)代碼

    這篇文章主要介紹了Xml中使用foreach遍歷對(duì)象實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    前段時(shí)間一直使用到word文檔轉(zhuǎn)pdf或者pdf轉(zhuǎn)word,尋思著用Java應(yīng)該是可以實(shí)現(xiàn)的,于是花了點(diǎn)時(shí)間寫了個(gè)文件轉(zhuǎn)換工具,感興趣的可以了解一下
    2023-01-01
  • 解析Java的可變長(zhǎng)參數(shù)列表及其使用時(shí)的注意點(diǎn)

    解析Java的可變長(zhǎng)參數(shù)列表及其使用時(shí)的注意點(diǎn)

    這篇文章主要介紹了解析Java的可變參數(shù)列表及其使用時(shí)的注意點(diǎn),注意可變參數(shù)必須位于最后一項(xiàng),需要的朋友可以參考下
    2016-03-03
  • Java Spring三級(jí)緩存

    Java Spring三級(jí)緩存

    三級(jí)緩存就是在Bean生成流程中保存Bean對(duì)象三種形態(tài)的三個(gè)Map集合,這個(gè)三級(jí)緩存就是為了解決循環(huán)依賴,本文給大家介紹Java Spring三級(jí)緩存,感興趣的朋友一起看看吧
    2025-06-06
  • MyEclipse+Tomcat配置詳解(圖文)

    MyEclipse+Tomcat配置詳解(圖文)

    這篇文章主要介紹了MyEclipse+Tomcat配置詳解(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • SpringBoot實(shí)現(xiàn)不同用戶不同訪問(wèn)權(quán)限的示例代碼

    SpringBoot實(shí)現(xiàn)不同用戶不同訪問(wèn)權(quán)限的示例代碼

    這篇文章主要介紹了在SpringBoot中使用SpringSecurity實(shí)現(xiàn)基于角色的權(quán)限控制,涵蓋依賴添加、數(shù)據(jù)庫(kù)設(shè)計(jì)、實(shí)體類與Repository接口、UserDetailsService實(shí)現(xiàn)、安全配置、控制器創(chuàng)建及測(cè)試數(shù)據(jù)準(zhǔn)備,并提及@PreAuthorize注解與角色繼承配置,需要的朋友可以參考下
    2025-07-07
  • LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    Java計(jì)算無(wú)重復(fù)字符的最長(zhǎng)子串是一種常見(jiàn)的字符串處理算法,它的目的是找出一個(gè)字符串中無(wú)重復(fù)字符的最長(zhǎng)子串。該算法可以很好地解決一些字符串處理問(wèn)題,比如尋找字符串中重復(fù)字符的位置,以及計(jì)算字符串中無(wú)重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。
    2023-02-02
  • springboot訪問(wèn)請(qǐng)求404的原因及解決辦法

    springboot訪問(wèn)請(qǐng)求404的原因及解決辦法

    在使用Spring Boot開發(fā)應(yīng)用程序時(shí),有時(shí)可能會(huì)遇到訪問(wèn)請(qǐng)求出現(xiàn)404錯(cuò)誤的情況,即請(qǐng)求的資源未找到,這篇文章主要給大家介紹了關(guān)于springboot訪問(wèn)請(qǐng)求404的原因及解決辦法,需要的朋友可以參考下
    2023-09-09
  • Springboot+MultipartFile實(shí)現(xiàn)單文件,多文件批量上傳過(guò)程

    Springboot+MultipartFile實(shí)現(xiàn)單文件,多文件批量上傳過(guò)程

    在Spring?Boot中,若需Swagger顯示文件上傳按鈕,需使用@Consumes注解指定Content-Type(如multipart/form-data),以告知接口接受文件類型,此注解幫助Swagger正確識(shí)別請(qǐng)求參數(shù),確保功能展示完整
    2025-07-07

最新評(píng)論

平潭县| 于都县| 平和县| 襄汾县| 甘德县| 新野县| 临洮县| 泸州市| 资阳市| 衡山县| 津市市| 广昌县| 十堰市| 固镇县| 突泉县| 青铜峡市| 尚志市| 七台河市| 西青区| 宜州市| 科尔| 广饶县| 苗栗市| 蒲江县| 台东县| 开封县| 双柏县| 额济纳旗| 麻江县| 阿荣旗| 龙游县| 商水县| 阳西县| 海盐县| 密云县| 翼城县| 蒙山县| 芦山县| 平果县| 麻江县| 巨野县|