¿Por qué el principio AOP de Spring utiliza dos implementaciones, JDKProxy y Cglib?
La diferencia entre los dos proxies de Spring, JDK y CGLIB:
El proxy dinámico de Java usa el mecanismo de reflexión para generar una implementación La clase anónima de la interfaz proxy se procesa llamando a la clase invokeHandler antes de llamar a un método específico;
El proxy dinámico cglib utiliza el paquete de código abierto asm para agregar archivos de clase al proxy archivo de clase de objeto;
El proxy dinámico cglib utiliza el paquete de código abierto asm para cargar el archivo de clase de objeto proxy y procesarlo modificando su subclase de código de bytes.
1gt; Si el objeto de destino implementa la interfaz, el proxy dinámico JDK se utilizará de forma predeterminada para implementar AOP
2gt Si el objeto de destino implementa la interfaz, cglib puede ser; forzado a ser usado;
3gt; Si el objeto de destino no implementa la interfaz, debe usar la biblioteca cglib y Spring cambiará automáticamente entre el proxy dinámico JDK y cglib; p>4gt; Si el objeto de destino Si la interfaz no está implementada, se debe usar la biblioteca cglib y Spring cambiará automáticamente entre el proxy dinámico JDK y cglib;
5gt; implementar la interfaz, se debe utilizar la biblioteca cglib.