La Red de Conocimientos Pedagógicos - Conocimientos históricos - ¿Cómo implementar el proxy dinámico de Java en las preguntas de la entrevista de JD.COM?

¿Cómo implementar el proxy dinámico de Java en las preguntas de la entrevista de JD.COM?

El paquete de desarrollo Java actual incluye soporte para servidores proxy dinámicos, pero su implementación solo admite la implementación de interfaces.

Su implementación es principalmente a través de la clase java.lang.reflect.Proxy y java. interfaz lang.reflect.invocationhandler.

Agente

La clase se usa principalmente para obtener objetos proxy dinámicos, y la interfaz InvocationHandler se usa para restringir la implementación de la persona que llama, como se muestra a continuación, el extremo comercial definido por la interfaz HelloWorld .

Método, HelloWorldImpl es la implementación de la interfaz HelloWorld y HelloWorldHandler es la interfaz de InvocationHandler.

Ahora. El código es el siguiente:

Interfaz empresarial:

Interfaz pública HelloWorld {

void sayHelloWorld();

}

Implementación de la interfaz empresarial:

La clase pública HelloWorldImpl implementa HelloWorld {

public void sayHelloWorld() {

System.out.println("Hello World !") ;

}

}

Para implementar InvocationHandler, debe agregar algo de trabajo de procesamiento antes y después de llamar al método de interfaz. Aquí solo se envían dos cadenas al fondo antes y después de llamar al método. El código es el siguiente:

Importar idioma de Java reflejado;

Importar Java. lang .reflect . método;

La clase pública HelloWorldHandler implementa InvocationHandler {

//El objeto original que se va a representar

Objeto privado objOriginal

/**

*Constructor.

* @param objEl objeto original que se va a representar.

*/

controlador público de hola mundo (Objeto obj){

this.objOriginal = obj

}

Llamada a objeto público (proxy de objeto, método de método, parámetro de objeto[])

Lanzable

Resultado del objeto;

//Antes de la llamada al método

doBefore();

//Llamar al método del objeto original

resultado = método .invoke(this . obj original, args

<); p>//Después de la llamada al método

do after();

Devuelve el resultado;

}

Vacío privado doBefore( ) {

System.out.println("¡Antes de llamar al método!");

}

Vacío privado doAfter() {

¡Después de la llamada al método! );

}

}

Código de prueba:

Importar Java .lang . p>Importar Java. idioma. Reflejar proxy;

Prueba de clase pública {

Public static void main(String[] args) {

hola mundo HW. = nuevo hola mundo impl();

controlador de invocación = nuevo controlador de hola mundo(HW);

hola mundo proxy =(hola mundo)proxy nueva instancia de proxy(

hw.getClass().getClassLoader(),

hw.getClass().

handler);

proxy . ;

}

}

Primero, obtenga el objeto de implementación de la interfaz empresarial;

Obtenga una implementación de InvocationHandler. Aquí está el Objeto HelloWorldHandler;

Cree un objeto proxy dinámico;

Llame al método sayHelloWorld() a través del objeto proxy dinámico, y el objeto original HelloWorldImpl generará dos cadenas antes y después. método sayHelloWorld().

Ejecute la salida de la clase de prueba, como se muestra a continuación:

¡Antes de la llamada al método!

¡Hola mundo!

¡Después de la llamada al método!

Aquí hay muchos códigos de llamada de métodos en la clase de prueba. En nuestra aplicación real, la implementación de la llamada del cliente se puede simplificar mediante archivos de configuración. Además, un AOP simple también se puede implementar mediante un proxy dinámico.