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

詳解Java動態(tài)代理的實現(xiàn)及應用

 更新時間:2017年09月13日 10:15:35   作者:_Yasin  
這篇文章主要介紹了詳解Java動態(tài)代理的實現(xiàn)及應用的相關(guān)資料,希望通過本文大家能理解掌握Java動態(tài)代理的使用方法,需要的朋友可以參考下

詳解Java動態(tài)代理的實現(xiàn)及應用

Java動態(tài)代理其實寫日常業(yè)務代碼是不常用的,但在框架層一起RPC框架的客戶端是非常常見及重要的。spring的核心思想aop的底層原理實現(xiàn)就使用到了java的動態(tài)代理技術(shù)。

使用代理可以實現(xiàn)對象的遠程調(diào)用以及aop的實現(xiàn)。

java的動態(tài)代理的實現(xiàn),主要依賴InvoctionHandler(接口)和Proxy(類)這兩個。

下面是一個例子

實現(xiàn)的代理的一般需要有個接口

package com.yasin.ProxyLearn;

public interface IStudy {

  public void learn();

  public String getKonwledge();

}

該接口的實現(xiàn)的類

package com.yasin.ProxyLearn;

public class Study implements IStudy{

  public void learn() {
    System.out.println("我要開始學習了!");
  }

  public String getKonwledge() {

    return "Java真的強";
  }

}

代理類,該類需要實現(xiàn)InvacationHandler接口

package com.yasin.ProxyLearn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class StudyProxy implements InvocationHandler{

  //真實要被代理的對象
  private Object study;

  public StudyProxy(Object study){
    this.study=study;
  }

  /**
   * 當被代理對象執(zhí)行自己的方法時,便會執(zhí)行這個方法
   */
  public Object invoke(Object object, Method method, Object[] args) throws Throwable {

    Object obj=null;

    System.out.println("代理執(zhí)行前我可以執(zhí)行一些操作");

    //執(zhí)行被代理對象的方法
    obj = method.invoke(study, args);


    System.out.println("代理執(zhí)行后我還可以執(zhí)行一些操作");

    return obj;
  }

}

測試類

package com.yasin.JavaLearn;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

import com.yasin.ProxyLearn.IStudy;
import com.yasin.ProxyLearn.Study;
import com.yasin.ProxyLearn.StudyProxy;

/**
 * Hello world!
 *
 */
public class App {

  public static void main(String[] args) {

    IStudy study = new Study();

    InvocationHandler handler = new StudyProxy(study);

    IStudy proxyStudy =(IStudy)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {IStudy.class}, handler);

    proxyStudy.learn();

    System.out.println(proxyStudy.getKonwledge());

  }
}

以上就是java動態(tài)代理的基礎使用,在spring aop及rpc的遠程服務端的實現(xiàn)要比這復雜下,以后會在深入探討的。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 數(shù)據(jù)庫阿里連接池 druid配置詳解

    數(shù)據(jù)庫阿里連接池 druid配置詳解

    本篇文章主要介紹了數(shù)據(jù)庫阿里連接池 druid配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringCloud Zuul在何種情況下使用Hystrix及問題小結(jié)

    SpringCloud Zuul在何種情況下使用Hystrix及問題小結(jié)

    這篇文章主要介紹了SpringCloud Zuul在何種情況下使用Hystrix 及問題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • SpringBoot后端上傳文件類型檢測方式

    SpringBoot后端上傳文件類型檢測方式

    這篇文章主要介紹了SpringBoot后端上傳文件類型檢測方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Maven?繼承父工程時的relativePath標簽詳細解析

    Maven?繼承父工程時的relativePath標簽詳細解析

    這篇文章主要介紹了Maven?繼承父工程時的relativePath標簽解析,通過本文學習你需要注意子模塊想要用父模塊pom中的版本,請注意配置relativePath屬性,需要的朋友可以參考下
    2022-12-12
  • IDEA如何自動生成serialVersionUID的設置

    IDEA如何自動生成serialVersionUID的設置

    這篇文章主要介紹了IDEA如何自動生成 serialVersionUID 的設置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java簡單自定義異常實例代碼

    java簡單自定義異常實例代碼

    這篇文章主要為大家詳細介紹了java簡單自定義異常實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 淺談Java多線程實現(xiàn)及同步互斥通訊

    淺談Java多線程實現(xiàn)及同步互斥通訊

    下面小編就為大家?guī)硪黄獪\談Java多線程實現(xiàn)及同步互斥通訊。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java maven詳細介紹

    Java maven詳細介紹

    今天給大家復習一下Java基礎知識,簡單介紹Maven,文中有非常詳細的解釋,對Java初學者很有幫助喲,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么

    詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么

    這篇文章主要介紹了詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • java中獲取hashmap中的所有key方式

    java中獲取hashmap中的所有key方式

    這篇文章主要介紹了java中獲取hashmap中的所有key方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

林周县| 志丹县| 汝阳县| 平江县| 潜山县| 治多县| 沂源县| 公主岭市| 阿城市| 武乡县| 滕州市| 新宁县| 北流市| 渝北区| 谷城县| 濮阳县| 仁怀市| 崇阳县| 漯河市| 木兰县| 柏乡县| 海原县| 柘城县| 四平市| 东乡族自治县| 宜黄县| 胶南市| 富平县| 湖口县| 高雄市| 凤山县| 渭源县| 苍梧县| 兴隆县| 南乐县| 余庆县| 塘沽区| 芜湖县| 罗定市| 墨江| 奉化市|