El uso de proxy dinámico, la reflexión es la clave para lenguajes dinámicos
TestDynamicProxy
Empaquetar com.aff.dynamic; Importación java.lang.reflect.InvocationHandler; Importación del java.lang.reflect.Method; Importación del java.lang.reflect.Proxy; / * cliente proxy dinámico se refiere a un método para invocar otros objetos a través de la clase de proxy , y se crea dinámicamente clase objetivo objeto proxy en tiempo de ejecución, según sea necesario. Agente dinámico Uso: Depuración Remote Method Invocation principio patrón de diseño de proxy: . Usar un proxy para envolver un objeto, y luego vuelva a colocar el objeto original con el objeto proxy Cualquier llamada a pasar por el objeto original de proxy objeto proxy decidir si y cuándo. el método llama al objeto original. * / // proxies dinámicos, lo que refleja el lenguaje clave dinámica interfaz del Sujeto { nula acción (); } // la clase de proxy clase RealSubjectlos implementos Asunto { público vacío Acción () { System.out.println ( "yo era la clase de proxy, recuerda que hacer" ); } } // proxy de la clase clase MyInvocationHandler los implementos InvocationHandler { Object obj; // implementa las interfaces de proxy declaración de la clase de objeto // ① clase proxy para el objeto se crea una instancia // ② declaraciones de proxy de clase de objeto público objeto de Ciegos (objeto obj) { el presente oBJ = obj; // el proxy: una clase de proxy // el Proxy.newProxyInstance : ejemplos de una nueva clase de agentes, sino también para lograr las interfaces correspondientes se implementan en los métodos abstractos de la clase de proxy //. Obj.getClass () getClassLoader (): obj y el cargador de clases es el mismo, y el mismo es el objeto obj de proxy del cargador de clases clase // . Obj.getClass () Los getInterfaces (); se implementa clase de proxy lo interfaz de la clase proxy (representante), también // el siguiente: para lograr una interfaz InvocationHandler objeto de clase, que es MyInvocationHandler // este paso un objetivo de rentabilidad real de un proxy de clase retorno Proxy.newProxyInstance (obj.getClass () getClassLoader (. ), obj.getClass () los getInterfaces () ,. el presente ); } // cada vez que una clase de objeto proxy llama al método de acción a ser anulado, se convierte en el llamado método de invocación como @Override pública de invocación de objetos ( objeto proxy, método, método, Object [] args) lanza la {Throwable // valor de retorno returnVal correspondiente a la clase de proxy es un método (acción) valor de retorno abstracto Method.invoke returnVal = Objeto (obj, args); // obj es la clase de proxy de retorno returnVal; } } pública de clase TestDynamicProxy { públicas estáticas vacíos principales (args String []) { // 1. El objeto proxy de la clase verdadera RealSubject = nuevo nuevo RealSubject (); // 2. crear un objeto realización InvocationHandler clase de interfaz MyInvocationHandler Handler = nuevo nuevo MyInvocationHandler (); // 3. invoke ciego () devuelve el método una igualmente dinámicos implementa la clase real de la interfaz donde la aplicación de proxy de objeto Object obj = handler.blind (real); // tipo real es sujeto, objeto recibido por Sub = Asunto (Subject) obj; // se hagan más fuertes darle la vuelta y luego llamar a la acción, sub clase de proxy es el objeto de este tiempo, sub.action (); // Ir a la implementación InvocationHandler de la clase de interfaz (MyInvocationHandler) de invoke ( ) llamada al método } }