当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。