Primavera 体系 面试 (primavera, mvc primavera, arranque resorte, el resorte de nubes)

prefacio

Github: https://github.com/yihonglei/thinking-in-spring

CGLIB y un principio proxy dinámico JDK

diferencia CGLIB y JDK dinámicas proxies

1, proxies dinámicos JDK

El uso de interceptores (interceptor debe implementar InvocationHanlder), además de la reflexión Genera un proxy interfaz de clase anónima,

InvokeHandler para manejar la llamada antes de llamar a un método específico.

2, CGLIB dinámica de proxy

ASM utilizando paquetes de código abierto, la clase de archivos de clases de objetos de proxy cargados en, procesados ​​mediante la modificación de un código de bytes subclase.

3, cuándo usar el JDK o CGLIB?

1) Si implementa el objeto de destino de la interfaz, utilizará el caso de proxy dinámico AOP aplicación JDK por defecto.

2) Si implementa el objeto de destino de la interfaz, se puede forzar el uso de CGLIB lograr AOP.

3) Si el objeto de destino no implementa las interfaces debe ser utilizado biblioteca CGLIB, Primavera cambiará automáticamente entre proxies dinámicos de JDK y CGLIB.

4, de cómo forzar CGLIB lograr AOP?

bibliotecas CGLIB 1) se añadió (aspectjrt-xxx.jar, aspectjweaver-xxx.jar, cglib-nodep-xxx.jar)

2) añadir el archivo de configuración del resorte <aop: aspectj-autoproxy-target-clase de proxy = "true" />

5, JDK proxy dinámico y la generación de código de bytes diferencia CGLIB?

1) clase de proxy JDK dinámico que implementa la interfaz sólo se puede construir agente, y no para la clase.

2) la clase CGLIB se dirige a un método implementado agentes, principalmente para la generación de una subclases clase especificada, donde la cubierta,

     Y en donde el método para mejorar la cobertura, pero debido a que el uso de la herencia, la clase o método es mejor no ser declarado como final,

     Para la clase final o método no puede ser heredada.

6, CGLIB más rápido que el JDK?

1) El uso CGLIB dinámico proxy, el marco inferior ASM CGLIB generación de código byte, utilice las técnicas de generación de código de bytes clase de proxy,

Antes jdk6 mayores que utilizando la eficacia de la reflexión de Java. La única salvedad es que, CGLIB método final no puede ser declarado como un proxy para,

clase de proxy Debido principio CGLIB se genera dinámicamente es una subclase de.

2) Después de jdk6, JDK7, optimización gradual jdk8 del proxy dinámico JDK, en el caso de un menor número de llamadas, más eficientes que CGLIB JDK eficiencia agente proxy,

Sólo cuando una gran cantidad de tiempo de llamada, jdk6 y eficiencia de los agentes JDK7 CGLIB que un poco más bajo, pero en cuando jdk8, la agencia de JDK más eficiente que el agente CGLIB,

En resumen, cada actualización de la versión de JDK, JDK eficiencia de los agentes se han mejorado, y la agencia de noticias CGLIB realmente mantener el ritmo un poco.

7, primavera o cómo elegir un JDK CGLIB?

1) Al aplicar una interfaz Bean, primavera utilizará el proxy JDK dinámico.

2) Cuando la haba no implementa la interfaz, se logra el uso del resorte CGLIB.

3) puede forzar CGLIB (añadido en la primavera de configuración <aop: aspectj-autoproxy-target-clase de proxy = "true" />).

 

Actualización continua en ......

 

Publicados 502 artículos originales · ganado elogios 358 · Vistas 1,18 millones +

Supongo que te gusta

Origin blog.csdn.net/yhl_jxy/article/details/105349760
Recomendado
Clasificación