當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java java.lang.reflect.Proxy用法及代碼示例


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.的所有方法



相關用法


注:本文由純淨天空篩選整理自abhinavjain194大神的英文原創作品 java.lang.reflect.Proxy Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。