La aplicación de la reflexión proxy dinámico

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 
    } 
}

 

Supongo que te gusta

Origin www.cnblogs.com/afangfang/p/12625808.html
Recomendado
Clasificación