国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA動(dòng)態(tài)代理

entner / 2517人閱讀

摘要:代理的分類代理分為靜態(tài)和動(dòng)態(tài)代理。動(dòng)態(tài)代理代理類在運(yùn)行時(shí)產(chǎn)生,運(yùn)用的反射機(jī)制動(dòng)態(tài)創(chuàng)建而成。動(dòng)態(tài)代理動(dòng)態(tài)代理又可以分為庫提供的和庫提供,這里我們主要講講提供的動(dòng)態(tài)代理。被代理對(duì)象實(shí)現(xiàn)的接口。,用于分派執(zhí)行代理方法。

代理的分類

代理分為靜態(tài)和動(dòng)態(tài)代理。
靜態(tài)代理:硬編碼實(shí)現(xiàn)的代理類,在程序被編譯成.class文件時(shí)代理類就已經(jīng)存在。
動(dòng)態(tài)代理:代理類在運(yùn)行時(shí)產(chǎn)生,運(yùn)用jdk的反射機(jī)制動(dòng)態(tài)創(chuàng)建而成。

靜態(tài)代理

靜態(tài)代理可以通過組合的方式來實(shí)現(xiàn),下面看具體的demo實(shí)現(xiàn):

public class ProxyTest {

    @Test
    public void proxyMethodTest() {
       
        StaticProxy staticProxy = new StaticProxy(new ClientObject());
        System.out.println(staticProxy.get());
    }
}

interface ClientObjectInterface {
    public String get ();
}

class ClientObject implements ClientObjectInterface {
    public String get () {
        return "hi";
    }
}

class StaticProxy implements ClientObjectInterface {
    ClientObject clientObject;

    public StaticProxy(ClientObject clientObject) {
        this.clientObject = clientObject;
    }

    public String get() {
        return "proxy " + clientObject.get();
    }
}

運(yùn)行結(jié)果:
proxy hi

當(dāng)我們?cè)谑褂玫倪^程中發(fā)現(xiàn)ClientObject這個(gè)類隨著業(yè)務(wù)需求的變化已經(jīng)變得不夠用了,這是我們?cè)撛趺崔k?保持著對(duì)修改關(guān)閉,擴(kuò)展開放的原則,我們可以通過上面那種靜態(tài)代理的方式來實(shí)現(xiàn)業(yè)務(wù)需求的變化,當(dāng)然下面還有一種比較靈活的動(dòng)態(tài)代理的方式來處理上面這種case。

動(dòng)態(tài)代理

動(dòng)態(tài)代理又可以分為jdk庫提供的和cglib庫提供,這里我們主要講講jdk提供的動(dòng)態(tài)代理。jdk代理對(duì)象是通過java.lang.reflect.Proxy#newProxyInstance來進(jìn)行創(chuàng)建的。

public static Object newProxyInstance(ClassLoader loader,
                                          Class[] interfaces,
                                          InvocationHandler h)

loader:被代理對(duì)象的classloader。
interfaces:被代理對(duì)象實(shí)現(xiàn)的接口。
h:invocation handler,用于分派執(zhí)行代理方法。

下面看下具體的代理實(shí)現(xiàn)demo:

public class ProxyTest {

    @Test
    public void proxyMethodTest() {
        ClientObject clientObject = new ClientObject();
        ClientObjectInterface object = (ClientObjectInterface) Proxy.newProxyInstance(
            clientObject.getClass().getClassLoader(), clientObject.getClass().getInterfaces(),
            new ObjectProxy());
        System.out.println(object.get());
    }

}

interface ClientObjectInterface {
    public String get ();
}

class ClientObject implements ClientObjectInterface {
    public String get () {
        return "hi";
    }
}


class ObjectProxy implements InvocationHandler {

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("methodName: " + method.getName());
        return "no hi";
    }
}

運(yùn)行結(jié)果:
methodName: get
no hi

當(dāng)然可以在代理對(duì)象里面做很多事情,本demo只是簡(jiǎn)單的替換了被代理對(duì)象的函數(shù)體。

使用場(chǎng)景

代理的使用場(chǎng)景主要集中在,某一業(yè)務(wù)需要委托代理類集中處理某一業(yè)務(wù)然后再執(zhí)行具體的實(shí)現(xiàn)類的業(yè)務(wù)邏輯。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66113.html

相關(guān)文章

  • java動(dòng)態(tài)代理及RPC框架介紹

    摘要:這種語法,在中被稱為動(dòng)態(tài)代理。在動(dòng)態(tài)代理機(jī)制中,這個(gè)角色只能是接口。動(dòng)態(tài)代理就是實(shí)現(xiàn)的技術(shù)之一。 所謂動(dòng)態(tài)代理,指的是語言提供的一種語法,能夠?qū)?duì)對(duì)象中不同方法的調(diào)用重定向到一個(gè)統(tǒng)一的處理函數(shù)中來。python重寫__getattr__函數(shù)能夠做到這一點(diǎn),就連世界上最好的語言也提供稱為魔術(shù)方法的__call。這種語法除了能更好的實(shí)現(xiàn)動(dòng)態(tài)代理外,還是RPC框架實(shí)現(xiàn)原理的一部分。 動(dòng)態(tài)代理...

    2shou 評(píng)論0 收藏0
  • Java三種代理模式:靜態(tài)代理動(dòng)態(tài)代理和cglib代理

    摘要:動(dòng)態(tài)代理又被稱為代理或接口代理。靜態(tài)代理在編譯時(shí)產(chǎn)生字節(jié)碼文件,可以直接使用,效率高。代理無需實(shí)現(xiàn)接口,通過生成類字節(jié)碼實(shí)現(xiàn)代理,比反射稍快,不存在性能問題,但會(huì)繼承目標(biāo)對(duì)象,需要重寫方法,所以目標(biāo)對(duì)象不能為類。 一、代理模式介紹 代理模式是一種設(shè)計(jì)模式,提供了對(duì)目標(biāo)對(duì)象額外的訪問方式,即通過代理對(duì)象訪問目標(biāo)對(duì)象,這樣可以在不修改原目標(biāo)對(duì)象的前提下,提供額外的功能操作,擴(kuò)展目標(biāo)對(duì)象的功...

    Kaede 評(píng)論0 收藏0
  • Java動(dòng)態(tài)代理深度解析

    摘要:動(dòng)態(tài)代理深度解析引言說起動(dòng)態(tài)代理,很多人可能都沒有直接去使用過。因?yàn)榈膭?dòng)態(tài)代理只能代理接口,而不能代理原始的類。接下來是真正壓軸的環(huán)節(jié),實(shí)現(xiàn)自己的動(dòng)態(tài)代理類。 Java動(dòng)態(tài)代理深度解析 引言 說起動(dòng)態(tài)代理,很多人可能都沒有直接去使用過。但是只要用過Spring,那動(dòng)態(tài)代理就是一個(gè)是個(gè)繞不過的坎,因?yàn)镾pring的核心特性之一AOP就是基于動(dòng)態(tài)代理來實(shí)現(xiàn)的,那么什么情況下需要用到動(dòng)態(tài)代理...

    whinc 評(píng)論0 收藏0
  • Java代理設(shè)計(jì)模式(Proxy)的四種具體實(shí)現(xiàn):靜態(tài)代理動(dòng)態(tài)代理

    摘要:除了和外,我們還有最后一招我直接把一個(gè)代理類的源代碼用字符串拼出來,然后基于這個(gè)字符串調(diào)用的編譯期,動(dòng)態(tài)的創(chuàng)建一個(gè)新的文件,然后動(dòng)態(tài)編譯這個(gè)文件,這樣也能得到一個(gè)新的代理類。 面試問題:Java里的代理設(shè)計(jì)模式(Proxy Design Pattern)一共有幾種實(shí)現(xiàn)方式?這個(gè)題目很像孔乙己?jiǎn)栜钕愣沟能钭钟心膸追N寫法? showImg(https://segmentfault.com/...

    gclove 評(píng)論0 收藏0
  • 你真的完全了解Java動(dòng)態(tài)代理嗎?看這篇就夠了

    摘要:動(dòng)態(tài)地代理,可以猜測(cè)一下它的含義,在運(yùn)行時(shí)動(dòng)態(tài)地對(duì)某些東西代理,代理它做了其他事情。所以動(dòng)態(tài)代理的內(nèi)容重點(diǎn)就是這個(gè)。所以下一篇我們來細(xì)致了解下的到底是怎么使用動(dòng)態(tài)代理的。 之前講了《零基礎(chǔ)帶你看Spring源碼——IOC控制反轉(zhuǎn)》,本來打算下一篇講講Srping的AOP的,但是其中會(huì)涉及到Java的動(dòng)態(tài)代理,所以先單獨(dú)一篇來了解下Java的動(dòng)態(tài)代理到底是什么,Java是怎么實(shí)現(xiàn)它的。 ...

    haitiancoder 評(píng)論0 收藏0
  • Java中的動(dòng)態(tài)代理

    摘要:要明白,動(dòng)態(tài)代理類的存在意義是為了攔截方法并修改邏輯而動(dòng)態(tài)代理的局限性之一就是只能攔截接口所聲明的方法。因?yàn)閯?dòng)態(tài)代理類是繼承自業(yè)務(wù)類,所以該類和方法不能聲明成無法繼承或重寫。者最終都是生成了一個(gè)新的動(dòng)態(tài)代理類對(duì)象。 動(dòng)態(tài)代理 1、先談靜態(tài)代理 對(duì)于靜態(tài)代理,我們已經(jīng)很熟悉了。我們擁有一個(gè)抽象類,真實(shí)類繼承自抽象類并重寫其業(yè)務(wù)方法,代理類持有真實(shí)類的對(duì)象實(shí)例,在重寫業(yè)務(wù)方法中通過調(diào)用真實(shí)...

    CastlePeaK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<