Clase java.lang.reflect.Proxy en Java

Una clase de proxy está presente en el paquete java.lang. Una clase de proxy tiene ciertos métodos que se utilizan para crear instancias y clases de proxy dinámicas, y todas las clases creadas por esos métodos actúan como subclases para esta clase de proxy.

Declaración de clase:

public class Proxy
    extends Object
        implements Serializable

Campos:

protected InvocationHandler h

Maneja la invocación de esta instancia de proxy.

Constructor:

protected Proxy(InvocationHandler h) 

Construye una instancia de Proxy a partir de una subclase que suele ser una clase de proxy dinámica. La instancia se crea automáticamente con el valor requerido de este controlador de invocación h.

Crear controlador de invocación:

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();
    }
}

 

Métodos

Método Descripción
getInvocationHandler (proxy de objeto) Este método devuelve el controlador de invocación para la instancia de proxy especificada.
getProxyClass (cargador ClassLoader, Class<?>… interfaces) Este método devuelve el objeto java.lang.Class para una clase de proxy dado un cargador de clases y una array de interfaces.
esClaseProxy(Clase<?> cl) Este método devuelve verdadero si y solo si la clase especificada se generó dinámicamente para ser una clase de proxy utilizando el método getProxyClass o el método newProxyInstance.
newProxyInstance (cargador ClassLoader, interfaces Class<?>[], InvocationHandler h) Este método devuelve una instancia de una clase de proxy para las interfaces especificadas que envía invocaciones de métodos al controlador de invocaciones especificado.

1. Manejador de invocación estático getInvocationHandler (proxy de objeto): 

Devuelve el controlador de invocación para esta instancia de proxy.

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));
    }
}
Producción

demoInvocationHandler@378fd1ac

2. Clase estática <?> getProxyClass (cargador ClassLoader, interfaces Class<?>…): 

Devuelve el objeto java.lang.Class para una clase de proxy. La clase de proxy será definida por el cargador de clases requerido y puede implementar todas las interfaces proporcionadas.

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");
    }
}
Producción

Program executed successfully

3. booleano estático isProxyClass(Class<?> cl): 

Devuelve verdadero si esta clase se generó dinámicamente para ser una clase de proxy utilizando el método getProxyClass o el método newProxyInstance; de ​​lo contrario, devuelve falso.

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));
    }
}
Producción

true

4. Objeto estático newProxyInstance (cargador ClassLoader, interfaces Class<?>[], InvocationHandler h): 

Devuelve un objeto proxy de una clase proxy definida por el cargador de clases. Implementa todas las interfaces requeridas.

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");
    }
}
Producción

Proxy object returned successfully

La clase Proxy hereda todos los métodos de la clase java.lang.Object.

Publicación traducida automáticamente

Artículo escrito por abhinavjain194 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *