java.lang 包中存在代理類。代理類具有某些用於創建動態代理類和實例的方法,並且由這些方法創建的所有類都充當該代理類的子類。
類聲明:
public class Proxy extends Object implements Serializable
領域:
protected InvocationHandler h
它處理此代理實例的調用。
構造函數:
protected Proxy(InvocationHandler h)
從子類構造一個 Proxy 實例,該子類通常是動態代理類。該實例將使用該調用處理程序 h 所需的值自動創建。
創建調用處理程序:
Java
// Invocation handler implementation
import java.lang.reflect.InvocationHandler;
class demoInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
return null;
}
}
public class GFG {
public static void main(String[] args)
{
InvocationHandler h = new demoInvocationHandler();
}
}
方法
Method | Description |
getIncationHandler(對象代理) | 此方法返回指定代理實例的調用處理程序。 |
getProxyClass(ClassLoader 加載器,Class<?>... 接口) | 在給定類加載器和接口數組的情況下,此方法返回代理類的 java.lang.Class 對象。 |
isProxyClass(Class<?> cl) | 當且僅當指定的類是使用 getProxyClass 方法或 newProxyInstance 方法動態生成為代理類時,此方法返回 true。 |
newProxyInstance(ClassLoader 加載器、Class<?>[] 接口、InitationHandler h) | 此方法返回指定接口的代理類實例,該接口將方法調用分派到指定的調用處理程序。 |
1. static InvocationHandler getIncationHandler(對象代理):
返回此代理實例的調用處理程序。
Java
// getInvocationHandler() Method implementation
//Import required libraries
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
// demoInvocationHandler class
class demoInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
return null;
}
}
// demoInterface
interface demoInterface {
}
// Driver code
public class GFG {
public static void main(String[] args)
{
// Object created
InvocationHandler h = new demoInvocationHandler();
// ProxyClass objects stored in list
List proxyClass = (List)Proxy.newProxyInstance(
GFG.class.getClassLoader(),
new Class[] { List.class },
new demoInvocationHandler());
System.out.println(
Proxy.getInvocationHandler(proxyClass));
}
}
輸出
demoInvocationHandler@378fd1ac
2. static Class<?> getProxyClass(ClassLoader 加載器, Class<?>... 接口):
返回代理類的 java.lang.Class 對象。代理類將由所需的類加載器定義,並且可以實現所有提供的接口。
Java
// getProxyClass() Method implementation
//Import required libraries
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
// demoInvocationHandler class
class demoInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
return null;
}
}
// demoInterface
interface demoInterface {
}
// demo class
class demo {
}
// driver code
public class GFG {
public static void main(String[] args)
{
// Object created
InvocationHandler h = new demoInvocationHandler();
@SuppressWarnings("deprecation")
Class<?> proxyClass = (Class<?>)Proxy.getProxyClass(
demo.class.getClassLoader(),
new Class[] { demoInterface.class });
System.out.println("Program executed successfully");
}
}
輸出
Program executed successfully
3. static boolean isProxyClass(Class<?> cl):
如果此類是使用 getProxyClass 方法動態生成為代理類,則返回 true,否則返回 false。
Java
// isProxyClass() Method implementation
// Import required libraries
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
// demoInvocationHandler class
class demoInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
return null;
}
}
// demoInterface
interface demoInterface {
}
// demo class
class demo {
}
// Driver code
public class GFG {
public static void main(String[] args)
{
// Object created
InvocationHandler h = new demoInvocationHandler();
@SuppressWarnings("deprecation")
Class<?> proxyClass = (Class<?>)Proxy.getProxyClass(
demo.class.getClassLoader(),
new Class[] { demoInterface.class });
System.out.println(Proxy.isProxyClass(proxyClass));
}
}
輸出
true
4. static Object newProxyInstance(ClassLoader 加載器, Class<?>[] 接口, InvocationHandler h):
返回由類加載器定義的代理類的代理對象。它實現了所有必需的接口。
Java
// newProxyInstance() Method implementation
// Import required libraries
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
// demoInvocationHandler class
class demoInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
return null;
}
}
// demoInterface
interface demoInterface {
}
// driver code
public class GFG {
public static void main(String[] args)
{
// Object created
InvocationHandler h = new demoInvocationHandler();
List proxyClass = (List)Proxy.newProxyInstance(
GFG.class.getClassLoader(),
new Class[] { List.class },
new demoInvocationHandler());
System.out.println(
"Proxy object returned successfully");
}
}
輸出
Proxy object returned successfully
代理類繼承了java.lang.Object class.的所有方法
相關用法
- Java java.lang.reflect.Proxy.getInvocationHandler()用法及代碼示例
- Java java.lang.reflect.Proxy.getProxyClass()用法及代碼示例
- Java java.lang.reflect.Proxy.isProxyClass()用法及代碼示例
- Java java.lang.reflect.Proxy.newProxyInstance()用法及代碼示例
- Java java.lang.reflect.Parameter用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotation()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getDeclaredAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.isAccessible()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.setAccessible()用法及代碼示例
- Java java.lang.reflect.Array.get()用法及代碼示例
- Java java.lang.reflect.Array.getBoolean()用法及代碼示例
- Java java.lang.reflect.Array.getByte()用法及代碼示例
- Java java.lang.reflect.Array.getChar()用法及代碼示例
- Java java.lang.reflect.Array.getDouble()用法及代碼示例
- Java java.lang.reflect.Array.getFloat()用法及代碼示例
- Java java.lang.reflect.Array.getInt()用法及代碼示例
- Java java.lang.reflect.Array.getLength()用法及代碼示例
- Java java.lang.reflect.Array.getLong()用法及代碼示例
- Java java.lang.reflect.Array.getShort()用法及代碼示例
- Java java.lang.reflect.Array.newInstance()用法及代碼示例
- Java java.lang.reflect.Array.set()用法及代碼示例
- Java java.lang.reflect.Array.setBoolean()用法及代碼示例
- Java java.lang.reflect.Array.setByte()用法及代碼示例
- Java java.lang.reflect.Array.setChar()用法及代碼示例
注:本文由純淨天空篩選整理自abhinavjain194大神的英文原創作品 java.lang.reflect.Proxy Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。