动态代理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");
	}
}
相关文章
相关标签/搜索