https://blog.csdn.net/scplove/article/details/52451899
java reflect proxy

java.jpg
Java動態(tài)代理的類和接口
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
java.lang.reflect.Proxy:動態(tài)代理機(jī)制的主類,提供一組靜態(tài)方法為一組接口動態(tài)的生成對象和代理類。
public static InvocationHandler getInvocationHandler(Object proxy)
public static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces)
public static boolean isProxyClass(Class<?> cl)
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)
-
java.lang.reflect.InvocationHandler:調(diào)用處理器接口,自定義invokle方法,用于實(shí)現(xiàn)對于真正委托類的代理訪問。
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable
-
java.lang.ClassLoader:類裝載器類,將類的字節(jié)碼裝載到 Java 虛擬機(jī)(JVM)中并為其定義類對象,然后該類才能被使用。Proxy類與普通類的唯一區(qū)別就是其字節(jié)碼是由 JVM 在運(yùn)行時動態(tài)生成的而非預(yù)存在于任何一個 .class 文件中。
每次生成動態(tài)代理類對象時都需要指定一個類裝載器對象:newProxyInstance()方法第一個參數(shù)。
動態(tài)代理機(jī)制
- 通過實(shí)現(xiàn)
InvocationHandler接口創(chuàng)建自己的調(diào)用處理器。 - 通過為Proxy類指定ClassLoader對象和一組interface來創(chuàng)建動態(tài)代理類。
- 通過反射機(jī)制獲得動態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型是調(diào)用處理器接口類型。
- 通過構(gòu)造函數(shù)創(chuàng)建動態(tài)代理類實(shí)例,構(gòu)造時調(diào)用處理器對象作為參數(shù)被傳入。