創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)專注于洛寧企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,成都做商城網(wǎng)站。洛寧網(wǎng)站建設公司,為洛寧等地區(qū)提供建站服務。全流程按需求定制網(wǎng)站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務摘要
相比于靜態(tài)代理,動態(tài)代理避免了開發(fā)人員編寫各個繁鎖的靜態(tài)代理類,只需簡單地指定一組接口及目標類對象就能動態(tài)的獲得代理對象。
代理模式
使用代理模式必須要讓代理類和目標類實現(xiàn)相同的接口,客戶端通過代理類來調(diào)用目標方法,代理類會將所有的方法調(diào)用分派到目標對象上反射執(zhí)行,還可以在分派過程中添加"前置通知"和后置處理(如在調(diào)用目標方法前校驗權(quán)限,在調(diào)用完目標方法后打印日志等)等功能。
使用動態(tài)代理的五大步驟
1.通過實現(xiàn)InvocationHandler接口來自定義自己的InvocationHandler;
2.通過Proxy.getProxyClass獲得動態(tài)代理類
3.通過反射機制獲得代理類的構(gòu)造方法,方法簽名為getConstructor(InvocationHandler.class)
4.通過構(gòu)造函數(shù)獲得代理對象并將自定義的InvocationHandler實例對象傳為參數(shù)傳入
5.通過代理對象調(diào)用目標方法
動態(tài)代理的使用
例1(方式一)
public class MyProxy { public interface IHello{ void sayHello(); } static class Hello implements IHello{ public void sayHello() { System.out.println("Hello world!!"); } } //自定義InvocationHandler static class HWInvocationHandler implements InvocationHandler{ //目標對象 private Object target; public HWInvocationHandler(Object target){ this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("------插入前置通知代碼-------------"); //執(zhí)行相應的目標方法 Object rs = method.invoke(target,args); System.out.println("------插入后置處理代碼-------------"); return rs; } } public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetExc eption, InstantiationException { //生成$Proxy0的class文件 System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); //獲取動態(tài)代理類 Class proxyClazz = Proxy.getProxyClass(IHello.class.getClassLoader(),IHello.class); //獲得代理類的構(gòu)造函數(shù),并傳入?yún)?shù)類型InvocationHandler.class Constructor constructor = proxyClazz.getConstructor(InvocationHandler.class); //通過構(gòu)造函數(shù)來創(chuàng)建動態(tài)代理對象,將自定義的InvocationHandler實例傳入 IHello iHello = (IHello) constructor.newInstance(new HWInvocationHandler(new Hello())); //通過代理對象調(diào)用目標方法 iHello.sayHello(); } }
標題名稱:深度剖析java中JDK動態(tài)代理機制-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article24/dhecce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、搜索引擎優(yōu)化、自適應網(wǎng)站、軟件開發(fā)、靜態(tài)網(wǎng)站、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容