动态代理的简单实现

//这个接口定义一个可以移动的方法
public interface Moveable {
	void move();
}

//Car类实现了Moveable接口
public class Car implements Moveable {
	public void move() {
		System.out.println("Car moving!");
		try {
			Thread.sleep(new Random().nextInt(10000));
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

//定义一个记录方法运行时间的操作类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class TimeHandler implements InvocationHandler {
	Moveable m;

	public TimeHandler(Moveable m) {
		super();
		this.m = m;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		long start = System.currentTimeMillis();
		method.invoke(m, null);
		long end = System.currentTimeMillis();
		System.out.println("time:" + (end - start));
		return null;
	}
}

//测试代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Test {
	public static void main(String[] args) {
		Car c = new Car();
		InvocationHandler h = new TimeHandler(c);
		Moveable m = (Moveable) Proxy.newProxyInstance(Test.class
				.getClassLoader(), new Class[] { Moveable.class }, h);
		m.move();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值