java 動態代理 demo 實現原理 參數理解(三)

 

動態代理兩個重要的組成:   Proxy   與   InvocationHandlerhtml

Hello1  hello = (Hello1) Proxy.newProxyInstance(Hello.class.getClassLoader(),new Class[]{Hello1.class},new HelloProxy<HelloWorld>(new HelloWorld()));

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h)數組

第一個類加載器,  目前以爲這個理解的不到位,由於要生成一個在內存中的代理對象,須要一個類加載器器,日常post

第二個參數,被代理對象的全部接口,假如 hello 實現了 Hello 、 Hello1  這兩個接口,這個參數 就變數,兩個接口組成的 class數組, 參數的目的是: 本質上實際上是多態,  這樣this

Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), this);  這個方法能夠 強制轉換成Hello  也能夠是 Hello1代理

第三個參數  這個參數 要實現 InvocationHandler 接口htm

 

InvocationHandler   要實現的方法以下:對象

 
  
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

三個參數: proxy  這個感受沒有用上blog

這樣的是第二個參數:  method  這個是被代理類的接口層的實現方法的Class 對象,好比有個方法 sayHello 這個就是sayHello 的class 對象,而後經過反射機制 去調用這個方法接口

第三個參數  就是方法使用到的參數內存

相關文章
相關標籤/搜索