動態代理ArrayList實現add方法打印

1.什麼是動態代理 java

一種用於轉發請求,進行特殊處理的機制,「動態」應該指的是「運行期」。  ide

2.爲何使用動態代理 this

能夠對請求進行任何處理(如事務,日誌等,這都是網上說的,我固然能夠作任何處理)  spa

3.使用動態代理有什麼好處 代理

能夠對請求進行任何處理(如事務,日誌等,這都是網上說的,我固然能夠作任何處理)  日誌

4.哪些地方須要動態代理 code

不容許直接訪問某些類;對訪問要作特殊處理等,我只能想到這些。 繼承

爲何代理只能代理接口 接口

由於全部生成的代理已經繼承自Proxy,若是再繼承,不符合java規範,不容許存在多繼承 事務


動態代理實現新增add 打印日誌

public class ArrayListInvocationHandler implements InvocationHandler {
		
	Object list=null;
	
	public ArrayListInvocationHandler(Object list){
		this.list=list;
	}
	
	public Object getProxy(){
		return Proxy.newProxyInstance(this.getClass().getClassLoader(), list.getClass().getInterfaces(),this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {

if(method.getName().equals("add"))

System.out.println(list.getClass().getName()+":before add");

Object temp=method.invoke(list, args); return temp; } }



public class ArrayListProxyTest {
	public static void main(String[] args) {
		ArrayListInvocationHandler handler=new ArrayListInvocationHandler(new LinkedList<String>());
		List<String> list=(List<String>)handler.getProxy();
		list.add("abc");
	}
}
相關文章
相關標籤/搜索