代理模式,網上有不少例子。最多的也最全的就是介紹的四種代理模式,靜態代理,動態代理--invocationhandler(實現了接口的被代理類),動態代理--CGLIB(未實現接口,類不是final),動態代理--編譯器提供的API動態建立代理類(未實現接口,類是final)。我這裏整理了一下別人資料。下面是動態代理之一的invocationhandler。詳細請看:html
https://www.toutiao.com/i6579893201602085379/?tt_from=mobile_qq&utm_campaign=client_share×tamp=1541029119&app=news_article&utm_source=mobile_qq&iid=47365531296&utm_medium=toutiao_ios&group_id=6579893201602085379java
public class EnginnerProxy implements InvocationHandler {ios
Object obj;api
public Object bind(Object obj){oracle
this.obj = obj;app
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);ide
}this
@Override.net
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{代理
System.out.println("Enginner writes document");
Object res = method.invoke(obj, args);
return res;
}
}
**********************************************************************************************
動態代理的一個主要類是proxy,API中是這麼介紹:Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods(代理提供建立動態代理類和實例的靜態方法,而且也是由這些方法建立的全部動態代理類的超類)。
具體參考proxy API:https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Proxy.html。
proxy 的方法有四個,getInvocationHandler(Object proxy),getProxyClass(ClassLoader loader, Class<?>... interfaces),isProxyClass(Class<?> cl),newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h);具體參考上面API。
newProxyInstance使用到最多的,這篇文檔講的很細很全。能夠參考:https://blog.csdn.net/yangaiyu/article/details/73827043;