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

資訊專欄INFORMATION COLUMN

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

IamDLY / 3055人閱讀

摘要:動(dòng)態(tài)代理能干嘛提供了另外一種實(shí)現(xiàn)接口的方式,不用也能實(shí)現(xiàn)接口。有了動(dòng)態(tài)代理,中的網(wǎng)絡(luò)交互部分可以完全寫在框架中,對(duì)用戶來說編程更加方便。

靜態(tài)代理
public class TargetClass{
    void method1()
}

public class ProxyClass{
    private TargetClass target;
    
    public void method1(){
        target.method1()
    }
}

代理類持有目標(biāo)類的引用

動(dòng)態(tài)代理
public interface TargetIntf{
    void method1();
}

public DynamicProxy implements InvocationHandler{
    @Override
    public Object invoke(Object o, Method method, Object[] args){
        //do proxy
    }
}

InvocationHandler handler = new DynamicProxy();
Proxy theProxy = (TargetIntf)Proxy.newInstance(hander.getClass().getClassLoader(), new Class[]{TargetIntf.class}, handler);
theProxy.method1()

要有接口

要實(shí)現(xiàn)InocationHandler

通過Proxy.newInstance來生成代理類

通過強(qiáng)轉(zhuǎn)取得目標(biāo)類的實(shí)例

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

當(dāng)調(diào)用theProxy的method1時(shí),會(huì)觸發(fā)handler.invoke方法的調(diào)用,方法(Method)和參數(shù)都會(huì)傳遞給invoke方法,invoke方法里面想做什么都行。

為什么Proxy.newInstance可以強(qiáng)轉(zhuǎn)成TargetIntf呢?

Proxy.newInstance返回的對(duì)象實(shí)現(xiàn)了TargetIntf接口的方法,所以可以強(qiáng)轉(zhuǎn)。

為什么調(diào)用proxy的method1方法會(huì)調(diào)用到handler的invoke方法?

Proxy.newInstance返回的對(duì)象組合了handler,并在method1方法的實(shí)現(xiàn)邏輯中添加了handler.invoke的調(diào)用。

Proxy.newInstance如何動(dòng)態(tài)的實(shí)現(xiàn)TargetIntf的方法并返回對(duì)象實(shí)例呢?

動(dòng)態(tài)的生成class文件,java類的信息都是從class文件加載進(jìn)來的,Proxy.newInstance方法中動(dòng)態(tài)的生成了class文件并加載。

動(dòng)態(tài)代理能干嘛?

提供了另外一種實(shí)現(xiàn)接口的方式,不用implements也能實(shí)現(xiàn)接口。

可以用來寫框架

試想一下,如果沒有動(dòng)態(tài)代理,dubbo框架如何實(shí)現(xiàn)?

動(dòng)態(tài)代理的dubbo實(shí)現(xiàn):

client和server端都依賴api的接口

client端不實(shí)現(xiàn)api接口,通過動(dòng)態(tài)代理,把a(bǔ)pi接口調(diào)用連接到Invocation.invoke方法上,在此方法中將對(duì)象、方法名、參數(shù)等通過網(wǎng)絡(luò)發(fā)送給server端

server端實(shí)現(xiàn)api的接口,把client端發(fā)送過來的rpc調(diào)用連接到api接口的具體實(shí)現(xiàn)上。

沒有動(dòng)態(tài)代理的實(shí)現(xiàn):

client和server端都依賴api接口

client端實(shí)現(xiàn)api接口,接口的實(shí)現(xiàn)邏輯為把對(duì)象、方法名、參數(shù)等通過網(wǎng)絡(luò)發(fā)送給server端

server端實(shí)現(xiàn)api的接口,把client端發(fā)送過來的rpc調(diào)用連接到api接口的具體實(shí)現(xiàn)上。

有了動(dòng)態(tài)代理,dubbo rpc中的網(wǎng)絡(luò)交互部分可以完全寫在dubbo框架中,對(duì)用戶來說編程更加方便。
沒有動(dòng)態(tài)代理,client端的api實(shí)現(xiàn)代碼也可以通過工具自動(dòng)生成,不過這樣讓框架使用起來更加的復(fù)雜。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74958.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動(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)代理 理解

    摘要:之后通過類的靜態(tài)方法取得一個(gè)代理類實(shí)例再次鄙視自己。值得一提,動(dòng)態(tài)代理把也代理了。總結(jié)動(dòng)態(tài)代理優(yōu)點(diǎn)相比靜態(tài)代理,不用每代理一個(gè)類就得寫一個(gè)新的代理類。缺點(diǎn)只能代理實(shí)現(xiàn)了接口的類,因?yàn)槭菃卫^承,代理類已經(jīng)是類的子類了。 動(dòng)態(tài)代理 這里暫時(shí)只做JDK動(dòng)態(tài)代理分析。動(dòng)態(tài)代理應(yīng)用廣泛,例如AOP。 showImg(https://segmentfault.com/img/bVUmAr?w=21...

    3fuyu 評(píng)論0 收藏0
  • JAVA代理模式理解和應(yīng)用

    摘要:代理模式代理模式通俗一點(diǎn)的解釋就是在操作一個(gè)對(duì)象和對(duì)象中的方法時(shí),不是直接操作這個(gè)對(duì)象,還是通過一個(gè)代理對(duì)象來操作這個(gè)實(shí)際的目標(biāo)對(duì)象。 代理模式: 代理模式通俗一點(diǎn)的解釋就是在操作一個(gè)對(duì)象和對(duì)象中的方法時(shí),不是直接操作這個(gè)對(duì)象,還是通過一個(gè)代理對(duì)象來操作這個(gè)實(shí)際的目標(biāo)對(duì)象。應(yīng)用場(chǎng)景一般是需要在執(zhí)行某個(gè)已經(jīng)寫好的方法前后再添加一段邏輯,比如執(zhí)行方法前打印日志,或者在執(zhí)行方法之前和之后打時(shí)...

    CatalpaFlat 評(píng)論0 收藏0
  • 10分鐘看懂動(dòng)態(tài)代理設(shè)計(jì)模式

    摘要:動(dòng)態(tài)代理是語言中非常經(jīng)典的一種設(shè)計(jì)模式,也是所有設(shè)計(jì)模式中最難理解的一種。本文將通過一個(gè)簡(jiǎn)單的例子模擬動(dòng)態(tài)代理實(shí)現(xiàn),讓你徹底明白動(dòng)態(tài)代理設(shè)計(jì)模式的本質(zhì),文章中可能會(huì)涉及到一些你沒有學(xué)習(xí)過的知識(shí)點(diǎn)或概念。 動(dòng)態(tài)代理是Java語言中非常經(jīng)典的一種設(shè)計(jì)模式,也是所有設(shè)計(jì)模式中最難理解的一種。本文將通過一個(gè)簡(jiǎn)單的例子模擬JDK動(dòng)態(tài)代理實(shí)現(xiàn),讓你徹底明白動(dòng)態(tài)代理設(shè)計(jì)模式的本質(zhì),文章中可能會(huì)涉及到...

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

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

0條評(píng)論

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