https://blog.csdn.net/scplove/article/details/52451899
java
reflect
proxy
java.jpg
Java動態代理的類和接口
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
java.lang.reflect.Proxy
:動態代理機制的主類,提供一組靜態方法為一組接口動態的生成對象和代理類。
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
:調用處理器接口,自定義invokle方法,用于實現對于真正委托類的代理訪問。
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable
-
java.lang.ClassLoader
:類裝載器類,將類的字節碼裝載到 Java 虛擬機(JVM)中并為其定義類對象,然后該類才能被使用。Proxy類與普通類的唯一區別就是其字節碼是由 JVM 在運行時動態生成的而非預存在于任何一個 .class 文件中。
每次生成動態代理類對象時都需要指定一個類裝載器對象:newProxyInstance()
方法第一個參數。
動態代理機制
- 通過實現
InvocationHandler
接口創建自己的調用處理器。 - 通過為Proxy類指定ClassLoader對象和一組interface來創建動態代理類。
- 通過反射機制獲得動態代理類的構造函數,其唯一參數類型是調用處理器接口類型。
- 通過構造函數創建動態代理類實例,構造時調用處理器對象作為參數被傳入。