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"); } }