package com.example;
import java.io.FileOutputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import sun.misc.ProxyGenerator;
public class MyClass {
public static void main(String[] args) {
final RealSubJect realSubJect = new RealSubJect();
ISubject proxySubject = (ISubject) Proxy.newProxyInstance(ISubject.class.getClassLoader(),
new Class[]{ISubject.class},
new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
System.out.println("invoke method...");
return method.invoke(realSubJect, objects);
}
});
proxySubject.doSth();
//write proxySubject class binary data to file
createProxyClassFile();
}
public static void createProxyClassFile() {
String name = "ProxyISubject";
byte[] data = ProxyGenerator.generateProxyClass(name, new Class[]{ISubject.class});
try {
FileOutputStream out = new FileOutputStream(name + ".class");
out.write(data);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}