国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java JDK動態代理實現原理實例解析

瀏覽:5日期:2022-08-30 14:49:58

JDK動態代理實現原理

動態代理機制

通過實現 InvocationHandler 接口創建自己的調用處理器

通過為 Proxy 類指定 ClassLoader 對象和一組 interface 來創建動態代理類

通過反射機制獲得動態代理類的構造函數,其唯一參數類型是調用處理器接口類型

通過構造函數創建動態代理類實例,構造時調用處理器對象作為參數被傳入

Interface InvocationHandler

該接口中僅定義了一個方法Object:invoke(Object obj,Method method,Object[] args)。在實際使用時,第一個參數obj一般是指代理類,method是被代理的方法,args為該方法的參數數組。這個抽象方法在代理類中動態實現。

Proxy

該類即為動態代理類

Protected Proxy(InvocationHandler h)

構造函數,用于給內部的h賦值

Static Class getProxyClass (ClassLoader loader,Class[] interfaces)

獲得一個代理類,其中loader是類裝載器,interfaces是真實類所擁有的全部接口的數組Static Object newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h)

返回代理類的一個實例,返回后的代理類可以當作被代理類使用(可使用被代理類的在Subject接口中聲明過的方法)

Dynamic Proxy

它是在運行時生成的class,在生成它時你必須提供一組interface給它,然后該class就宣稱它實現了這些 interface。你當然可以把該class的實例當作這些interface中的任何一個來用。當然啦,這個Dynamic Proxy其實就是一個Proxy,它不會替你作實質性的工作,在生成它的實例時你必須提供一個handler,由它接管實際的工作。

代碼示例

創建接口:

/** * @CreateDate: 2019/6/17 14:52 * @Version: 1.0 */public interface BuyService { String buyPhone(); String buyComputer();}

創建實現類:

public class BuyServiceImpl implements BuyService { @Intercept('buyPhone') @Override public String buyPhone() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('==========BuyServiceImpl.class=============' + ' buyPhone'); this.buyComputer(); return 'buy phone'; } @Intercept('buyComputer') @Override public String buyComputer() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('==========BuyServiceImpl.class=============' + ' buyComputer'); return 'buy computer'; }}

創建 InvocationHandler:

public class ReflectionHandler implements InvocationHandler { private Object target; public ReflectionHandler(Object target) { this.target = target; } public <T> T getProxy(){ return (T) Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(target,args); }}

創建啟動類:

public class Bootstrap { public static void main(String[] args) { // 動態代理實現 ReflectionHandler reflectionHandler = new ReflectionHandler(new BuyServiceImpl()); BuyService proxy = reflectionHandler.getProxy(); String computer = proxy.buyComputer(); String phone = proxy.buyPhone(); System.out.println(computer + 'rn' + phone); }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 国产美女精品视频免费观看 | 亚洲精品国产专区91在线 | 亚洲天堂网在线观看视频 | 亚洲久久在线观看 | 91视频99| 怡红院视频在线 | 欧美黄色a | 欧美一级视频免费 | 国产精品久久久久久久久久影院 | 在线观看成年人免费视频 | 欧美一级级毛片 | a一级爱做片免费 | 亚洲成a人片在线观看中 | 自拍 欧美 | 亚洲午夜在线播放 | 一区二区三区视频免费观看 | 黄网站免费在线 | 国产日产久久高清欧美一区 | 成人午夜影视 | 欧美黄成人免费网站大全 | 久久99精品久久久久久综合 | 免费午夜不卡毛片 | 国产美女在线一区二区三区 | 国产成人咱精品视频免费网站 | 国产在亚洲线视频观看 | 久久草在线免费 | 免费一级欧美片在线观免看 | 性欧美一级 | 国产亚洲精品精品国产亚洲综合 | 国产乱码精品一区二区三区中 | 黄色免费在线观看视频 | 牛牛本精品99久久精品88m | 美国毛片一级 | 久久午夜国产片 | 72种姿势欧美久久久久大黄蕉 | 精品国产自在现线看久久 | 午夜宅男在线永远免费观看网 | 久久青草网站 | 国产一级久久久久久毛片 | 亚洲精品视频在线 | 萌白酱喷水福利视频在线 |