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