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