亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深度模擬java動態代理實現機制系類之一

2019-11-14 15:37:01
字體:
來源:轉載
供稿:網友

上一篇博客是最基本的動態代理原理的實現,因為其固定了接口,固定了代理方法,以及固定了代理的類型,
接下來的博客系類將一步步漸入深度介紹java的動態代理的實現原理


****************************************************************************
首先補充一下“java代理”的相關知識,靜態代理的實現包括兩種方式,一是聚合,另一種是繼承。
聚合是指通過接口,調用其實現類的具體方法:比如接口i,含有方法run(); 類A 實現了接口i,當然
也實現了方法run(); 類B于是就可以通過new一個接口 i 的對象,調用A的run()方法,并在run()方法前后實現其他操作,
這樣就實現了對A的run()方法的代理;
繼承當然更好理解,就是把run()方法重寫,從而實現代理
但是,一旦代理的操作很多,需要寫的類都非常的繁雜,就需要不斷的寫代理類,不斷的更新代理操作,于是這就有了動
態代理。

*****************************************************************************

這次要對實現任意接口的類進行代理。

1、接口

public interface Moveable {    void move();}

  



2、被代理的對象

 1 public class Tank implements Moveable { 2  3     @Override 4     public void move() { 5          6         System.out.); 7         try { 8             Thread.sleep(new Random().nextInt(10000)); 9         } catch (InterruptedException e) {10             e.printStackTrace();11         }12         13     }14     15 }

 


3、用于產生代理對象

 1 public class Proxy { 2     //產生新的動態代理類 3     public static Object newProxyInstance(Class intf) throws Exception{  //將接口當成參數傳入,這樣就可以代理實現了任意接口的類,而不僅是實現了Moveable接口 4         //將一下字符串動態編譯,生成代理類 5         //實現方式有以下擊中:jdk6.0 complier API;CGLib;  ASM 6         String rt = "/r/n"; 7         String src = 8                 "public class TankTimeProxy implements " +intf.getName()+ "{"+rt+   //直接用intf,是調用toString方法,前會加入字符串 interface 9                         intf.getName()+" t;"+rt+10 11                         "    public TankTimeProxy("+intf.getName()+" t) {"+rt+12                         "    this.t = t;"+rt+13                         "    }"+rt+14 15                         "    @Override"+rt+16                         "    public void move() {"+rt+17                         "        long start = System.currentTimeMillis();"+rt+18                         "        System.out.println(/"start time is /"+start);"+rt+19                         "        t.move();"+rt+20                         "        long end = System.currentTimeMillis();"+rt+21                         "        System.out.println(/"end time is /"+end);"+rt+22                         "        System.out.println(/"time is /"+(end - start));"+rt+23                         "    }"+rt+24                         "}";25 26         //進行編譯27         String fileName = "g:/src/TankTimeProxy.java";//將文件另外存儲,不放置在工程的默認路徑,防止緩沖區相關類的沖突28         File f = new File(fileName);29         FileWriter fw = new FileWriter(f);30         //System.out.println(fileName);31         fw.write(src);  //寫入內容32 33         fw.flush();34         fw.close();35 36         //進行編譯37         //首先獲得編譯器38         //compiler  為java編譯器    javac39         //獲得編譯器對象40         JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();41         //System.out.println(compiler.getClass().getName());//取得類名42         //參數含義 (編譯診斷,locale,charset)43         //管理動態生成的文件44         StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null);//默認值45         //根據參數獲取多個java文件   返回java文件對象46         Iterable units = fileManager.getJavaFileObjects(fileName);47 48         //“編譯任務”對象49         JavaCompiler.CompilationTask task = compiler.getTask(null,fileManager,null,null,null,units);50         task.call();//調用51         fileManager.close();52 53         //************以上過程獲得了java文件源碼,編譯生成了java文件的class文件*******54         //加載至內存,生成新對象55         //Class.load(0 是加載path路徑的class文件56         //URLClassLoader是將硬盤中的class文件加載進入57 58         //通過Url引入本地文件59         URL[] urls = new URL[]{new URL("file:/"+"g:/src/")}; //指定生成class文件的位置,與java文件放置在同一目錄60         //去指定路徑尋找class文件61         URLClassLoader urlClassLoader = new URLClassLoader(urls);62 63         Class c = urlClassLoader.loadClass("TankTimeProxy");64 65         System.out.println(c);66 67         //執行68         //c.newInstance(); 是調用空的構造方法69 70         //獲得構造方法71         //根據java虛擬機,每一個構造方法也相當于一個對象72         Constructor constructor = c.getConstructor(intf);73 74         //產生新對象75         Moveable m = (Moveable) constructor.newInstance(new Tank());  //new Tank()為構造方法的參數   即被代理對象76 77         m.move();78 79         return m;80     }81 }

 




4、測試端

1 public class Client {2     public static void main(String[] args) throws Exception {3 4         //這里任然以Moveable接口為例傳入,因為在Proxy中為節省麻煩,還是固定生成了Moveable,后來會慢慢簡化的,其實是可以傳遞任意的的接口的5         Moveable m =(Moveable) Proxy.newProxyInstance(Moveable.class);6         m.move();7 8     }9 }

 



5、結果

(1)生成的java與class文件

(2)java文件的代碼

(3)運行結果


上一篇:JAVA問題集錦Ⅰ

下一篇:Java多線程理解

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲影院色无极综合| 欧美xxxx综合视频| 成人午夜一级二级三级| 欧美成人在线免费| 久久精品亚洲94久久精品| 亚洲天堂2020| 日韩国产高清视频在线| 亚州国产精品久久久| 久久久久国产精品免费| 国产不卡一区二区在线播放| 亚洲欧美日韩久久久久久| 国产精自产拍久久久久久| 97成人精品视频在线观看| 中文字幕亚洲无线码在线一区| 国内精品模特av私拍在线观看| 国产精品网红福利| 亚洲xxx大片| 久久亚洲电影天堂| 日韩精品在线观看网站| 日韩国产中文字幕| 欧美高清在线观看| 国产精品大片wwwwww| 午夜精品www| 米奇精品一区二区三区在线观看| 国产精品美女在线观看| 亚洲专区国产精品| 97国产真实伦对白精彩视频8| 国产精品海角社区在线观看| 97香蕉超级碰碰久久免费的优势| 亚洲二区在线播放视频| 91av在线免费观看视频| 国产精品第8页| 亚洲综合在线做性| 日韩网站在线观看| 美女啪啪无遮挡免费久久网站| 日韩视频免费观看| 久久久国产影院| 亚洲最大福利视频| 亚洲激情成人网| 国产亚洲在线播放| 国产亚洲精品成人av久久ww| 久久久久久久久久久网站| 精品日韩美女的视频高清| 日韩精品免费在线观看| 77777亚洲午夜久久多人| 97色在线观看免费视频| 欧美日韩免费在线| 97久久精品人搡人人玩| 国产亚洲人成网站在线观看| 国产成人在线播放| 亚洲变态欧美另类捆绑| 国产精品欧美一区二区| 久久成人这里只有精品| 色综合久久精品亚洲国产| 亚洲精品小视频| 91久久精品一区| 在线观看91久久久久久| 久久久久久久国产| 欧洲亚洲在线视频| 亚洲一区二区黄| 亚洲国产日韩欧美综合久久| 中文字幕欧美在线| 亚洲小视频在线观看| 亚洲日本中文字幕| 超碰97人人做人人爱少妇| 欧美日韩精品在线| 欧美精品精品精品精品免费| 欧美激情在线播放| 欧美限制级电影在线观看| 国产在线98福利播放视频| 久久91亚洲精品中文字幕奶水| 国产精品视频在线观看| 亚洲a成v人在线观看| 在线亚洲午夜片av大片| 国产精彩精品视频| 欧洲美女免费图片一区| 国产精品视频26uuu| 亚洲成人黄色网址| 成人精品久久一区二区三区| 久久国内精品一国内精品| 91美女片黄在线观| 国产精品成人一区二区| 清纯唯美亚洲综合| 国产精品视频免费在线| 91av在线免费观看| 欧美精品电影在线| 亚洲视频在线免费观看| 欧美精品xxx| 欧美激情亚洲一区| 欧美一级bbbbb性bbbb喷潮片| 丰满岳妇乱一区二区三区| 国产在线观看精品| www.欧美精品一二三区| 欧美国产极速在线| 亚洲免费视频一区二区| 欧美日韩亚洲系列| 日韩免费在线视频| 欧美高清视频一区二区| 久久综合亚洲社区| 亚洲人成在线免费观看| 亚洲午夜精品久久久久久性色| 亚洲国产毛片完整版| 九九精品在线播放| 91免费精品国偷自产在线| 91麻豆国产精品| 国产伦精品一区二区三区精品视频| 国产成人精品日本亚洲专区61| 成人免费午夜电影| 欧美极品少妇与黑人| 国产精品久久久久久久久久久久久| 国产精品久久久久高潮| 国产激情综合五月久久| 美女视频黄免费的亚洲男人天堂| 亚洲区免费影片| 国产精品欧美在线| 日韩欧美综合在线视频| 久久久国产精彩视频美女艺术照福利| 久久久国产精品x99av| 国产精品视频区1| 伦伦影院午夜日韩欧美限制| 韩国欧美亚洲国产| 精品国产电影一区| 久久精品视频va| 亚洲色图激情小说| 91黄色8090| 国产日韩精品综合网站| 亚洲性夜色噜噜噜7777| 午夜精品久久久久久久99热浪潮| 亚洲影视九九影院在线观看| 久久频这里精品99香蕉| 亚洲人成电影网站色…| 中文字幕日韩欧美精品在线观看| 中文字幕日韩高清| 欧美大片免费观看| 欧美有码在线观看| 91sa在线看| 国外成人在线直播| 亚洲免费小视频| 色噜噜狠狠狠综合曰曰曰| 久久免费国产视频| 美女久久久久久久| 亚洲黄色成人网| 欧美成年人视频| 日韩中文字幕第一页| 亚洲精品永久免费精品| 欧美俄罗斯性视频| 成人黄色免费网站在线观看| 久久国产精品久久久| 国产一区二区三区网站| 欧美激情久久久| 日韩电影免费在线观看| 日韩激情av在线播放| 久久久久久久一区二区| 欧美一二三视频| 亚洲精品网站在线播放gif| 91精品视频一区| 91极品女神在线| 日韩欧美极品在线观看| 91免费观看网站| 亚洲国产精品人久久电影| 91成人在线视频| 91精品国产91久久| 久久最新资源网| 久久人91精品久久久久久不卡|