日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

静态代理详解[通俗易懂](静态方法和非静态方法区别)

發布時間:2023/12/25 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 静态代理详解[通俗易懂](静态方法和非静态方法区别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是靜態代理?

代理這個詞是來源于Java設計模式中的代理模式,代理模式最簡單的理解就是通過第三方來代理我們的工作

比如中介,房東需要將自己的房子租出去,而租客需要租房子,三者關系如此

租客租房子一般都找不到房東,房東也不會輕易將自己暴露給廣大租客,因此就需要中介來充當這個中間關系

因此租客就只能通過中介來進行租房子這個工作,不需要通過房東,這就叫做代理—-就是中介代理房東來處理租房子這件事情

那么我們應用于Java中又是什么樣的情況呢?

首先創建一個主題接口(創建接口,JDK動態代理就是以接口、對象、代理對象為基礎)

public interface UserDao(){
    void add();
}

然后創建該接口的實現類(真實主題),也稱為被代理類(主要功能就在于該類中),我們需要一個代理類來代理這個類實現他的add方法

public class UserDaoImpl implements UserDao(){
    @Override
    public void add(){
        System.out.println("add.....");
    }
}

然后我們創建上述實現類的代理類(兩個類需要實現共同的主題接口,這樣才能對原有功能進行增強),使用代理類對原有類進行包裝

public class UserDaoProxy implements UserDao{
    private UserDao target;
    public UserDaoProxy(UserDao target){
        this.target = target;
    }

    public void add(){
        System.out.println("before...");
        target.add();
        System.out.println("after...");
    }
}

然后我們進行測試

@Test
    public void test1(){
       UserDao userDao = new UserDaoImpl();
       UserDaoProxy proxy = new UserDaoProxy(userDao);
       proxy.add();
    }

此圖為結果輸出

可能有人會問,這樣是不是多此一舉,為什么要去代理呢,而且前兩段代碼就能實現的功能,為什么還需要一個代理類去代理它,這就涉及到我們的工作需求,在不改變實現類的情況下,對實現類進行功能的增加,而上述代碼中兩個輸出語句就是對功能的增強(當然可以根據實際需求來添加實際代碼),由此而產生了代理類,生成代理對象

而所謂的靜態就是在創建代理類的時候,接口和被代理類都已經被固定了,無法改變,代理類就只能這一種類,我們主要的是實現代理功能,實際上已經完成了這個功能,

當實際開發中有很多這樣的主題接口和類需要功能增強時,就需要更多的代理類,即每一個主題接口都得創建一個代理類,會造成代碼的繁多和冗余,因此就產生了我們的動態代理技術https://blog.csdn.net/qq_42051306/article/details/114141307?spm=1001.2014.3001.5501

總結

以上是生活随笔為你收集整理的静态代理详解[通俗易懂](静态方法和非静态方法区别)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。