1. 程式人生 > >黑馬程式設計師-----動態代理Proxy

黑馬程式設計師-----動態代理Proxy

public class ProxyDemo3 {

	public static void main(String[] args) {

		//寫一個Collection集合的動態代理
		//使用Proxy的newProxyInstance方法直接建立代理物件
		Collection proxyColl = (Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(),
				new Class[]{Collection.class},
				new InvocationHandler(){
					//目標是ArrayList
					ArrayList<String> target = new ArrayList<String>();
					
					//引數:proxy代表代理物件,method代表代理物件呼叫的方法,args代表代理物件呼叫方法的實參。
					public Object invoke(Object proxy, Method method,
							Object[] args) throws Throwable {
						//代理中增加的計時方法
						long startTime = System.currentTimeMillis();
						Object retVal = method.invoke(target, args);
						long endTime = System.currentTimeMillis();
						System.out.println(method.getName() + "方法執行的時間是:" + (endTime-startTime));
						//該返回值返給代理物件呼叫某方法後其方法的返回值
						return retVal;
					}
				}
			);
		
		//代理物件每呼叫一個方法時,內部handler會呼叫invoke方法
		//而invoke方法會使目標target呼叫與代理物件呼叫的相同的方法。
		//它們的返回值也相同。
		proxyColl.add("hello");
		proxyColl.add("java");
		
		System.out.println(proxyColl.size());
	}

}