動態代理兩個重要的組成: 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 對象,而後經過反射機制 去調用這個方法接口
第三個參數 就是方法使用到的參數內存