黑馬程式設計師-----動態代理Proxy
阿新 • • 發佈:2019-02-20
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()); } }