java反射機制:代理類、動態代理類
代理類與委托類的關系:
代理類與委托類具有相同的接口,但委托類是接口的真正實現者,代理類只是調用委托類的相關方法來提供特定的服務,代理類可以為委托類預處理信息、把信息傳遞給委托類處理并進行事后處理。
代理類分為靜態代理類和動態代理類。
動態代理類是利用java的反射機制生成。利用java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler接口.
比如HelloService是代理類和委托類的共同接口,其中HelloServiceIml是委托類,則生成動態代理類的方法:
1、首先創建InvocationHandler接口實例:
final HelloService helloService=new HelloServiceIml();
InvocationHandler handler=new InvocationHandler(){
public Object invoke(Object proxy,Method method,Object[] args) throws Exception{
//proxy是生成的動態代理實例,method是調用的方法,args是方法的參數值
return method.invoke(helloService,args);//調用委托類的方法進行處理返回結果
}
};
2、創建動態代理
HelloService helloServiceProxy=(HelloService)Proxy.newProxyInstance(HelloService.class.getClassLoader(),
new Class[]{HelloService.class},
handler);
Proxy生成動態代理的靜態方法:
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
參數loader指定動態代理類的類加載器,interfaces指定動態代理類需要實現的所有接口,handler指定
與動態代理關聯的InvocationHandler對象。其中InvocationHandler是動態代理類方法調用的接口,最主要的就是前面所實現的invoke方法。
本文由用戶 tomivy 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!