Modo de agente
El modelo proxy se llama proxy o sustituto en inglés, y ambos pueden traducirse como "agente" en chino. El llamado proxy significa que una persona o una institución toma medidas en nombre de otra persona u otra institución. En algunos casos, un cliente no quiere o no puede referirse directamente a un objeto, y el objeto proxy puede actuar como un intermediario entre el cliente y el objeto objetivo
A. Rol de tema abstracto
Declara una interfaz común entre temas reales y proxy, de modo que se pueda utilizar cualquier tema real.
B. Rol de poder:
El rol del tema del agente contiene referencias a temas reales, para que los objetos de tema reales puedan operarse en cualquier momento; El rol del tema del agente proporciona la misma interfaz que el rol de tema real, para que pueda reemplazar el tema real para controlar las referencias a temas reales en cualquier momento, y es responsable de crear objetos de tema reales (y eliminar objetos de tema reales) cuando sea necesario; El rol del agente generalmente realiza una operación antes o después de pasar la llamada del cliente al tema real, en lugar de simplemente pasar la llamada al objeto de tema real.
C. Rol de tema real
Define el objeto real representado por el rol de poder
Por ejemplo:
Refactorización con modo proxy dinámico
JDK proxy dinámico
Clase de interceptor de clase objetivo
Resumen: 1. Debido a que la clase proxy generada por jdkproxy implementa la interfaz, todos los métodos en la clase de destino están incluidos en la clase proxy.
2. Todos los métodos de la clase proxy generada interceptan todos los métodos de la clase de destino. El contenido del método de invocación en el interceptor es exactamente la composición de cada método de la clase proxy.
3. Las interfaces deben existir al usar JDKProxy.
4. Los tres parámetros en el método Invoke pueden acceder a la API del método llamado, los parámetros del método llamado y el tipo de retorno del método llamado de la clase de destino.
Refactorización con el modo proxy dinámico JDK
Reconstruyendo transacciones de hibernación utilizando el modo de proxy dinámico JDK
proxy dinámico CGLIB
1. CGLIB es una poderosa biblioteca de clases de generación de código de código de alta calidad y de alta calidad. Puede extender las clases de Java e implementar interfaces Java durante el tiempo de ejecución.
2. Use CGLIB para generar una clase proxy como subclase de la clase de destino.
3. No se requiere interfaz para generar clases proxy utilizando CGLIB
4. La clase proxy generada por CGLIB anula los métodos de la clase principal.
5. El contenido del método de intercepción en el interceptor es exactamente el cuerpo del método en la clase proxy.
Refactorizar transacciones de hibernación utilizando el modo proxy dinámico CGLIB
Métodos de proxy de primavera
1. Si el objeto objetivo implementa varias interfaces, Spring usa Java.lang.reflect.Proxy de JDK.
Ventajas: Debido a que hay interfaces, el sistema está más libremente acoplado. Desventajas: cree interfaces para cada clase de destino.
2. Si el objeto de destino no implementa ninguna interfaz, Spring usa la biblioteca CGLIB para generar una subclase del objeto de destino.
Ventajas: Debido a que la clase proxy y la clase de destino se heredan, no hay necesidad de que exista una interfaz.
Desventajas: debido a que no se usa la interfaz, el acoplamiento del sistema no es tan bueno como el proxy dinámico que usa JDK.
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.