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