Proxy動態代理

1.文件結構


2. Rent.java 接口

package com.wyyblog.dynamicProxy;

public interface Rent {

	public void rent();
}

3. ProxyInvocationHandler.java 動態代理類

package com.wyyblog.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler {

	private Object object;
	
	public void setRent(Object object) {
		this.object = object;
	}
	
	/**
	 * 生成代理類
	 */
	public Object getProxy() {
		return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
	}
	
	
	/**
	 * proxy 是代理類
	 * method 是代理類調用處理程序 的方法對象
	 */
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		log(method.getName());
		Object result = method.invoke(object, args);
		return result;
	}
	
	/**
	 * 擴展日誌方法
	 * @param methodName方法名
	 * 可以自定義其他的方法進行擴展
	 */
	private void log(String methodName) {
		System.out.println("執行"+ methodName+"方法");
	}

}

4. Host.java 實現類

package com.wyyblog.dynamicProxy;

public class Host implements Rent{

	public void rent() {
		System.out.println("租房子");
	}
	
	
}

5. Client.java 測試類

package com.wyyblog.dynamicProxy;

public class Client {

	public static void main(String[] args) {
		Host host = new Host();
		ProxyInvocationHandler pih = new ProxyInvocationHandler();
		pih.setRent(host);
		Rent proxy = (Rent)pih.getProxy();
		proxy.rent();
	}
	
}

6. 總結:

    一個動態代理一般代理某一類業務,一個動態代理可以代理各種接口(類)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章