1.什么是动态代理
一种用于转发请求,进行特殊处理的机制,“动态”应该指的是“运行期”。
2.为什么使用动态代理
可以对请求进行任何处理(如事务,日志等,这都是网上说的,我当然可以做任何处理)
3.使用动态代理有什么好处
可以对请求进行任何处理(如事务,日志等,这都是网上说的,我当然可以做任何处理)
4.哪些地方需要动态代理
不允许直接访问某些类;对访问要做特殊处理等,我只能想到这些。
为什么代理只能代理接口
因为所有生成的代理已经继承自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");
}
}