<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學(xué)習(xí)

    java學(xué)習(xí)

     

    設(shè)計(jì)模式之模擬jdk的動態(tài)代理

    jdk的動態(tài)代理模式的目標(biāo)類和動態(tài)生成的代理類都要實(shí)現(xiàn)同一個接口。
    public interface MoveAble {
    void move();
    }
    public interface InvocationHandler {
    public void invoke(Object o, Method m);
    }
    public class Tank1 implements MoveAble{
    @Override
    public void move() {
    System.out.println("moving");
    }
    }
    public class TimeHandler implements InvocationHandler{
    private Object target;
    public TimeHandler(Object target) {
    super();
    this.target = target;
    }
    @Override
    public void invoke(Object o, Method m) {
    long start = System.currentTimeMillis();
    System.out.println("starttime:" + start);
    System.out.println(o.getClass().getName());
    try {
    m.invoke(target);
    } catch (Exception e) {
    e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    System.out.println("time:" + (end-start));
    }
    }
    public class Proxy {
    public static Object newProxyInstance(Class infce, InvocationHandler invocationHandler) throws Exception { //JDK6 Complier API, CGLib, ASM
    String methodStr = "";
    String rt = "\r\n";
    Method[] methods = infce.getMethods();
    for(Method m : methods) {
    Class<?> returnType = m.getReturnType();
    methodStr += "@Override" + rt + 
    "public  "+returnType+" " + m.getName() + "() {" + rt +
    "    try {" + rt +
    "    Method md = " + infce.getName() + ".class.getMethod(\"" + m.getName() + "\");" + rt +
    "    h.invoke(this, md);" + rt +
    "    }catch(Exception e) {e.printStackTrace();}" + rt +
    "}";
    }
    String src = 
    "package proxy.tank;" +  rt +
    "import java.lang.reflect.Method;" + rt +
    "public class $Proxy1 implements " + infce.getName() + "{" + rt +
    "    public $Proxy1(InvocationHandler h) {" + rt +
    "        this.h = h;" + rt +
    "    }" + rt +
    "    proxy.tank.InvocationHandler h;" + rt +
    methodStr +
    "}";
    String fileName = 
    "d:/src/proxy/tank/$Proxy1.java";
    File f = new File(fileName);
    FileWriter fw = new FileWriter(f);
    fw.write(src);
    fw.flush();
    fw.close();
    //compile
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
    Iterable units = fileMgr.getJavaFileObjects(fileName);
    CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);
    t.call();
    fileMgr.close();
    //load into memory and create an instance
    URL[] urls = new URL[] {new URL("file:/" + "d:/src/")};
    URLClassLoader ul = new URLClassLoader(urls);
    Class c = ul.loadClass("proxy.tank.$Proxy1");
    System.out.println(c);
    Constructor ctr = c.getConstructor(InvocationHandler.class);
    Object m = ctr.newInstance(invocationHandler);
    return m;
    }
    }
    public class Client {
    public static void main(String[] args) throws Exception {
    Tank1 t = new Tank1();
    InvocationHandler h = new TimeHandler(t);
    MoveAble m = (MoveAble)Proxy.newProxyInstance(MoveAble.class, h);
    m.move();
    }
    }

    posted on 2017-09-14 15:35 楊軍威 閱讀(127) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 中文亚洲AV片在线观看不卡| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲电影日韩精品| 97国产免费全部免费观看 | 亚洲视频一区网站| 亚洲精品国产第一综合99久久| 很黄很黄的网站免费的| 日本永久免费a∨在线视频| 亚洲AV无码成H人在线观看| 手机永久免费的AV在线电影网| 国产成人精品日本亚洲11| 羞羞视频免费网站含羞草| 亚洲精品国产情侣av在线| 伊人久久综在合线亚洲91| 亚洲AV伊人久久青青草原| 好吊妞在线成人免费| 亚洲国产成人AV网站| 亚洲人成在线播放网站| 亚洲AV永久无码精品一区二区国产| 性感美女视频在线观看免费精品| 国产在线观看麻豆91精品免费| 午夜无码A级毛片免费视频| WWW国产成人免费观看视频| 国产精品亚洲专一区二区三区| 亚洲精品国产精品乱码视色| 亚洲精品国产综合久久一线| 亚洲AV永久无码精品一区二区国产| 日韩高清免费在线观看| 在线免费观看a级片| 免费人成视频在线| 成人黄18免费视频| 精品在线免费观看| a在线免费观看视频| 亚洲a∨无码一区二区| 亚洲日韩看片无码电影| 亚洲影视自拍揄拍愉拍| 亚洲乱码在线卡一卡二卡新区| 亚洲国产综合无码一区| 亚洲人成网7777777国产| 久久精品国产亚洲网站| 亚洲国产人成网站在线电影动漫 |