在idea中查找ProxyGenerator类,查看类的全路径,选择以下对应的代码
System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles","true");
或
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
demo如下:
package designpattern.proxy.v3;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Random;
/**
* 动态代理
*
* @Auther: IceBear
* @Date: 2022/2/13 19:25
* @Description:
*/
public class ProxyMain {
public static void main(String[] args) {
// System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles","true");
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
Tank tank = new Tank();
Movable m=(Movable) Proxy.newProxyInstance(Tank.class.getClassLoader(),
new Class[]{Movable.class},new LogHandler(tank));
m.move();
}
}
class Tank implements Movable {
@Override
public void move() {
System.out.println("Tank is moving...");
try {
Thread.sleep(new Random().nextInt(100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class LogHandler implements InvocationHandler {
Tank tank;
public LogHandler(Tank tank) {
this.tank = tank;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("method," + method.getName() + ",start");
Object o = method.invoke(tank, args);
System.out.println("method," + method.getName() + ",end");
return o;
}
}
interface Movable {
void move();
}