变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

當前位置: 首頁IT技術 → 設計模式之Dynamic Proxy-動態(tài)代理

設計模式之Dynamic Proxy-動態(tài)代理

更多

  動態(tài)代理(Dynamic Proxy)是JDK5 提供的一種新特性。其特點在于在程序的運行時刻動態(tài)的創(chuàng)建出代理類及其對象,而不像我們使用靜態(tài)代理時必須在編譯之前定義好代理類。在運行時刻,框架幫我們動態(tài)的創(chuàng)建出一個實現(xiàn)了多個接口的代理類,每個代理類的對象都會和一個InvocationHandler接口的實現(xiàn)類相關聯(lián)。當我們調(diào)用了代理對象所代理的接口中的方法的時候,這個調(diào)用的信息會被傳遞給InvocationHandler的invoke方法。在 invoke方法的參數(shù)中可以獲取到代理對象、方法對應的Method對象和調(diào)用的實際參數(shù)(內(nèi)部是通過反射來實現(xiàn)的)。 invoke方法的返回值被返回給使用者,至于返回什么值可以由自己來定義,這種做法實際上相當于對方法調(diào)用進行了AOP攔截。

  創(chuàng)建動態(tài)代理的步驟如下:

  1. 創(chuàng)建一個實現(xiàn)接口InvocationHandler的類,它必須實現(xiàn)invoke方法。

  2. 創(chuàng)建被代理類以及接口

  3. 通過Proxy的靜態(tài)方法newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)創(chuàng)建一個代理

  4. 通過代理來調(diào)用方法(此代理實現(xiàn)了被代理類的接口)

  寫了個示例代碼

   /** * DynamicSubject.java * dynamicproxy * * Function: 動態(tài)代理類, java.lang.reflect.Proxy 是運行時生成的Class,在生成它的時候你必須傳遞 * 一組Interfaces給它(多個接口),然后返回的對象就實現(xiàn)了這些接口,這個Proxy就是一個純粹的Porxy, * 所以我們必須提供一個InvocationHandler,由它來接替 * * ver date author * ────────────────────────────────── * 2011-6-12 Leon * * Copyright (c) 2011, TNT All Rights Reserved. */ package dynamicproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * ClassName:DynamicSubject * Function: TODO ADD FUNCTION * 創(chuàng)建動態(tài)代理的步驟如下: * 1. 創(chuàng)建一個實現(xiàn)接口InvocationHandler的類,它必須實現(xiàn)invoke方法。 * 2. 創(chuàng)建被代理類以及接口 * 3. 通過Proxy的靜態(tài)方法newProxyInstance(ClassLoader loader, * Class[] interfaces, InvocationHandler h)創(chuàng)建一個代理 * 4. 通過代理來調(diào)用方法(此代理實現(xiàn)了被代理類的接口) * * * Reason: TODO ADD REASON * * @author Leon * @version * @since Ver 1.1 * @Date 2011-6-12 */ public class DynamicProxy implements InvocationHandler { private Object sub ; public Object getSub() { return sub; } public void setSub(Object sub) { this.sub = sub; } public DynamicProxy(Object obj){ this.sub=obj; } //proxy是框架動態(tài)生成的代理類 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object result = null ; System.out.println("before calling: " + method); //此處是真正被代理的對象 result=method.invoke(sub, args); System.out.println("after calling ..."); return result; } public static void main(String... args){ RealSubject realSubject = new RealSubject(); DynamicProxy dynamicProxy = new DynamicProxy(realSubject); // InvocationHandler invocationHandler = dynamicProxy; //動態(tài)生成一個代理對象,返回的對象既不是RealSubject實例也不是DynamicPorxy的實例,而是動態(tài)生成 //的一個實例 $prxoy0,它實現(xiàn)了realSubject.getClass().getInterfaces()這些接口 ISubject subject=(ISubject)Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(), realSubject.getClass().getInterfaces(),dynamicProxy); //當調(diào)用這一句的時候,$proxy0就會調(diào)用上面?zhèn)魅氲膇nvocationHandler的invoke方法,所以上面的方法要傳入invocationHandler。 System.out.println("--------------------------Porxy realSubject1 ------------------------------------"); subject.request(); String result=subject.test(); System.out.println("return by test method :" + result); System.out.println("--------------------------Proxy realSubject2--------------------------------------"); dynamicProxy.setSub(new RealSubject2()); subject.request(); System.out.println("proxy generate by system is :"+subject.getClass()); } } interface ISubject { public void request(); public String test(); } class RealSubject implements ISubject { @Override public void request() { // TODO Auto-generated method stub System.out.println("From real subject...request method...."); } @Override public String test() { // TODO Auto-generated method stub String str ="From real subject.....test method....."; return str ; } } class RealSubject2 implements ISubject { @Override public void request() { // TODO Auto-generated method stub System.out.println("From real subject2...request method...."); } @Override public String test() { // TODO Auto-generated method stub System.out.println("From real subject2 .....test method....."); return null ; } } 

熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
主站蜘蛛池模板: 看黄网站在线观看 | 91香蕉视频破解版 | 大伊人网 | 麻豆精品国产剧情在线观看 | 成人免费观看一区二区 | 亚洲成人黄色片 | 日韩视频在线精品视频免费观看 | 日本黄色小说视频 | 一本色道久久综合狠狠躁 | 国产成人激情视频 | 热热热色| 一个人看的www在线播放 | 午夜影院免费体验 | 99精品欧美一区二区三区美图 | 激情综合五月网 | 欧美性xxx18一20 | 黄 色 大 片 网站 | 亚洲日本精品va中文字幕 | 亚洲精品成人a在线观看 | 天天躁夜夜躁狠狠躁2018a | 91在线免费视频 | 韩国理伦伦片在线观看 | 欧美一区二区三区高清视频 | 九月婷婷人人澡人人添人人爽 | 中文字幕欧美视频 | 色青五月天| 五月天婷婷一区二区三区久久 | 亚洲成人视屏 | 久久免费精品视频 | 最近资源中文字幕4 | 无遮挡高清一级毛片免费 | 国产精品入口麻豆高清在线 | 欧美日本一区二区三区 | 午夜色视频在线观看 | free性欧美极度另类性性欧美 | 伦理久久| 动漫精品一区二区三区视频 | 一个人看的www片免费视频中文 | 欧美一级欧美三级在线 | 在线观看一级毛片免费 | 国产一级高清视频 |