Java Dynamic Proxy ha sido explicado en la API conectada a Java, por lo que no lo escribiré aquí. Lo que entiendo:
Extienda la funcionalidad de un método específico en una interfaz específica, y este es el proxy. Un proxy es un método de llamadas a través de un objeto de controlador de llamadas asociado con una instancia de proxy.
Echemos un vistazo con un ejemplo:
interfaz:
interfaz pública num {void show (); int getNum (); int getProduct (int x);} Clase de implementación:
public class mynum implementa num {@Override public int getnum () {return 3; } @Override public int getProduct (int x) {return x; } @Override public void show () {System.out.println ("El método subyacente imprime el número 99"); }} Primero veamos cómo se describe el método de Invoke en la API
Es decir, el controlador de llamadas llama al método subyacente que representa el objeto del método al objeto de clase de implementación de la interfaz.
La primera forma de implementar el proxy:
clase pública numproxy {private objeto num; // Construye el objeto de clase de implementación de la interfaz a través del método del constructor public NumProxy (objeto num) {this.num = num; } Public Object getNumbyProxy () {object numProxy = proxy.newproxyInstance (num.getClass (). getClassLoLoader (), nueva clase [] {num.class}, nuevo invocationHandler () { /*** Método: el método de instancia de método correspondiente al método de interfaz de interfaz llamado en la instancia proxy. Lo que entiende es el método real de la instancia real de la instancia real de la instancia real de la instancia de proxy* La matriz de parámetros de los métodos reales*/ @Override Public Object Invoke (Object Proxy, Método, Object [] Args) lanza Showable {object obj = null; (Integer) Obj * 2; devolver numproxy; }} La segunda forma de implementar proxy: implementando la interfaz InvocationHandler
La clase pública numProxyImpl implementa InvocationHandler {// Aquí he concreto el tipo de interfaz, y no se escribe como objeto num num num; public NumProxyImpl (num num) {this.num = num; } @Override public Object Invoke (Proxy de objeto, método Método, objeto [] args) lanza lando {objeto obj = null; String MethodName = Method.getName (); if ("getProduct" .equals (metodName)) {System.out.println ("proxy: getProduct () inicio"); obj = Method.Invoke (num, args); obj = (entero) obj * 2; System.out.println ("proxy: getProduct () end"); } else if ("show" .equals (metodName)) {System.out.println ("proxy: show () inicio"); obj = Method.Invoke (num, args); System.out.println ("proxy: show () end"); } return obj; }} Código de prueba:
public class testNum {public static void main (string [] args) {// test numProxy np = new numProxy (new mynum ()); Num numProxy = (num) np.getNumbyProxy (); int x = numProxy.getProduct (2); System.out.println (x); numProxy.show (); System.out.println ("---------------------"); NumProxyImpl npi = new numProxyImpl (new mynum ()); Num numPro = (num) proxy.newproxyInstance (num.class.getClassLoader (), nueva clase [] {num.class}, npi); int n = numPro.getProduct (3); System.out.println (n); numPro.show (); }} Resultados de la consola:
El segundo método está un poco confundido. No sé si lo tienes. Es decir, se llama el método de Invoke en NumProxyImpl que no se muestra, pero se ejecutó. Sí, bajemos a ver esto.
Si no quieres ser problemático, recuerda.
Por ejemplo, el proceso de codificación se puede usar para usar el proxy y escribir un ejemplo la próxima vez.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.