} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Time After "+m.getName());
}
}
3、测试类
package com.zec.disignmode;
public class Client {
public static void main(String[] args) {
Moveable m = new Tank();
LogHandler h = new LogHandler();
try {
Moveable moveable = (Moveable) Proxy.newInstance(Moveable.class, h);
moveable.move();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、生成动态代理类的 Proxy 静态类
代理产生器,根据传进来的参数 Class Intface 和 InvocationHandler h,产
生动态代理类;从而使 intface 中的所有方法都加上了 h 中 invoke 方法的自定义逻辑;为
了便于代理类的组合和扩展,代理类也会实现 Intface 接口,最终返回一个代理类对象。
package com.zec.disignmode;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
public class Proxy {
public static Object newInstance(Class intface,InvocationHandler h)
throws Exception {
/*Generate the source code*/
String rt = "\r\n";
String methodStr = "";