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

java動態(tài)代理示例分享

 更新時間:2014年02月17日 14:14:45   作者:  
這篇文章主要介紹了java動態(tài)代理示例,需要的朋友可以參考下

首先分析動態(tài)代理模式中的3個角色:
1.抽象角色:static proxy中它可以為抽象類,但是dynamic proxy中它只能是接口
2.真實角色:就是實現(xiàn)了抽象角色中的方法罷了
3.代理角色:最惡心的就是動態(tài)代理里面的這個代理角色了。它要持有真實角色的引用。

它涉及到一個接口和一個類,InvocationHandler接口和Proxy類。根據(jù)JDK文檔說,InvocationHandler接口是要被一個類實現(xiàn)的,這個類的實例是一個代理對象對應(yīng)的handler對象。當(dāng)代理對象的一個方法被調(diào)用,則會把該方法編碼并分配給它對應(yīng)的handler對象的invoke方法中去調(diào)用!

復(fù)制代碼 代碼如下:

//抽象角色:
public interface AbstractRole
{
public void show();
}

//真實角色:

public class RealRole implements AbstractRole

{

@Override

public void show(){ System.out.println("show me your house"); }

}

//代理角色:

//我覺得這只是一個偽代理罷了,偽代理是我自己想出來的= =!,因為它實際是代理對應(yīng)的handler

public class Handler implements InvocationHandler

{

private Object realRole; // 代理角色中需要有真實角色的引用,定義為Object類型則通用

public Handler(Object realRole)

{ this.realRole = realRole; }

@Override

public Object invoke(Object proxy, Method method, Object[] args)

{

System.out.println("Give me your money");  // 這是代理角色自己添加的額外功能罷了

method.invoke(this.realRole, args); //通過反射調(diào)用真實角色的方法

System.out.println("Ok...house is yours");//這是代理角色自己添加的額外功能罷了
}

public Object factory()//通過工廠方法生成真正的代理角色

{
return Proxy.newProxyInstance(this.getClass().getClassLoader(), this.realObject.getClass().getInterfaces(), this); //Proxy中的newProxyInstance方法有兩個很重要的特點(diǎn)!第一是動態(tài)創(chuàng)建一個代理類,若輸出好像是名叫$Proxy0的類;第二是通過動態(tài)創(chuàng)建的這個類生成一個實例。
}
}

//客戶端:
public class Test

{

   public static void main(String[] args)

  {
     RealRole realRole = new RealRole();//想要代理哪一個真實角色就new出這個真實角色

     Handler handler = new Handler(realRole);//這里產(chǎn)生了代理類對應(yīng)的handler了,我也想叫他偽代理對象

     AbstractRole proxy = (AbstractRole)handler.factory();//通過工廠方法產(chǎn)生代理對象
  }

}

以上也許會想這里代理角色怎么能強(qiáng)轉(zhuǎn)為抽象角色呢?原因在于newProxyInstance方法,這個方法太interesting了~就如上面說的,它會自動產(chǎn)生一個類,然后通過類產(chǎn)生代理對象。其實這個類就實現(xiàn)了抽象角色類了,為什么?因為第二個參數(shù)已經(jīng)指明了它實現(xiàn)哪些接口了。所以可以強(qiáng)轉(zhuǎn)了,強(qiáng)轉(zhuǎn)之后就可以調(diào)用抽象角色中的方法了

proxy.show();//好!注意這句了,我在最開始有紅體字標(biāo)出來,“會把該方法編碼并分配給它對應(yīng)的handler對象的invoke方法中去調(diào)用!” 就因為這句話,所以proxy.show()就是把show方法傳到了handler對象中的invoke方法中去了,當(dāng)然也跟著show方法的參數(shù)了,不過這里show方法沒有參數(shù)。所以proxy.show()這句話實際就是調(diào)用了handler對象中的invoke方法。

相關(guān)文章

  • 基于jni調(diào)用時,jvm報錯問題的深入分析

    基于jni調(diào)用時,jvm報錯問題的深入分析

    本篇文章是對jni調(diào)用時,jvm的報錯問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • IntelliJ IDEA連接MySQL數(shù)據(jù)庫詳細(xì)圖解

    IntelliJ IDEA連接MySQL數(shù)據(jù)庫詳細(xì)圖解

    今天小編就為大家分享一篇關(guān)于intellij idea連接mysql數(shù)據(jù)庫詳細(xì)圖解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot數(shù)據(jù)訪問的實現(xiàn)

    SpringBoot數(shù)據(jù)訪問的實現(xiàn)

    本文主要介紹了SpringBoot數(shù)據(jù)訪問的實現(xiàn),引入各種xxxTemplate,xxxRepository來簡化我們對數(shù)據(jù)訪問層的操作,感興趣的可以了解一下
    2023-11-11
  • Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • svn 清理失敗 (cleanup 失敗) 的快速解決方法

    svn 清理失敗 (cleanup 失敗) 的快速解決方法

    下面小編就為大家?guī)硪黄猻vn 清理失敗 (cleanup 失敗) 的快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • java 相交鏈表的實現(xiàn)示例

    java 相交鏈表的實現(xiàn)示例

    本文主要介紹了java 相交鏈表的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 如何取消IDEA中的項目和Git倉庫的關(guān)聯(lián)

    如何取消IDEA中的項目和Git倉庫的關(guān)聯(lián)

    這篇文章介紹了一種取消已經(jīng)開啟代碼控制的項目與Git倉庫關(guān)聯(lián)的簡單方法,首先,在IntelliJ IDEA中打開項目,刪除.idea目錄下的vcs.xml文件,這樣IDE界面上的Git圖標(biāo)就會消失,接下來,打開項目所在位置,通過文件管理器啟用“顯示隱藏的項目”選項
    2024-10-10
  • java使用Socket實現(xiàn)文件上傳功能

    java使用Socket實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了java使用Socket實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java單例模式4種使用方式分享

    java單例模式4種使用方式分享

    到底如何寫一個在生產(chǎn)環(huán)境中使用的單實例模式?下面是4種方式,大家參考使用吧
    2014-02-02
  • idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    這篇文章主要介紹了idea2023遠(yuǎn)程調(diào)試,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論

尚义县| 衢州市| 盐津县| 阳城县| 正镶白旗| 依兰县| 宁安市| 乐亭县| 辽源市| 浦江县| 奇台县| 青神县| 余江县| 虹口区| 铜山县| 灵武市| 郑州市| 明星| 彰化县| 邵东县| 阿巴嘎旗| 旺苍县| 淮南市| 乌鲁木齐县| 大丰市| 甘孜| 颍上县| 宜川县| 图木舒克市| 金川县| 揭东县| 黄大仙区| 舒城县| 京山县| 泾川县| 锡林浩特市| 麻栗坡县| 涡阳县| 诸城市| 神木县| 海安县|