Optimización del rendimiento de programas Java: modo proxy (5)
En el código anterior, los campos y métodos de la clase proxy se generan en tiempo de ejecución utilizando el método CtField make() y el método CtNewMehod make(). Esta lógica es manejada por el objeto CtClass de Javassist, que convierte el código Java en el código de bytes correspondiente y genera una instancia de la clase de proxy dinámico.
Tenga en cuenta que, en comparación con los servidores proxy estáticos, los servidores proxy dinámicos pueden reducir en gran medida el número de líneas de código y mejorar la flexibilidad del sistema.
La generación de clases proxy dinámicas en Java implica principalmente el uso de ClassLoader. Aquí, tomamos CGLIB como ejemplo para describir brevemente el proceso de carga de clases dinámicas. Para usar CGLIB para generar un proxy dinámico, primero debe generar una instancia de la clase Enhancer y especificar una clase de devolución de llamada para manejar el negocio del proxy. DefaultGeneratorSt se utilizará en el método create() de Enhancer. El método rategy Generate() genera el código de bytes de la clase de proxy dinámico y lo almacena en una matriz de bytes, luego usa el método defineClass() de ReflectUtils para llamar al método defineClass() de ClassLoader a través de la reflexión para cargar el código de bytes en el ClassLoader, y finalmente utiliza ReflectUt. El método ils newInstance() genera una instancia de una clase dinámica mediante reflexión y la devuelve. No importa qué método se utilice para generar un proxy dinámico, la lógica principal es la que se muestra en la figura, aunque los detalles de implementación son diferentes.
¿Estatura? Pasos básicos para implementar proxies dinámicos
Para probar mejor su rendimiento, el código sleep() en la clase DBQuery se elimina y se prueba mediante el siguiente método.
public static final int CIRCLE =;
Public static void main(String[] args) lanza una excepción {
IDBQuery d = null
long start =system currentTimeMillis()
D=createJdkProxy() //Prueba el proxy dinámico JDK
Sistema fuera println(createJdkProxy: (Tiempo actual del sistema millis()beg? in ))
Salida del sistema println( clase JdkProxy: d getClass() getName())
begin = sistema currentTimeMillis()
for(int I =; iltcircle;i)
d request()
Salida del sistema println( callJdkProxy: (hora actual del sistema()¿comenzar?))
begin = System currentTimeMillis( )
D=createCglibProxy() //Prueba el proxy dinámico CGLIB
Sistema fuera println(createCglibProxy: (Hora actual del sistema millis()b?egin))
Salida del sistema println(clase CglibProxy: d getClass() getName())
begin = sistema currentTimeMillis()
for(int I =; iltcircle; i )
d request()
Sistema fuera println(callCglibProxy: (Tiempo actual del sistema millis()beg? in))
begin = sistema currentTimeMillis()
d = createJavassistDynProxy()? //Prueba el proxy dinámico Javaassist.
Salida del sistema println(createjavassisdynproxy: (hora actual del sistema? lis() comienza))
Salida del sistema println(clase javavassisdynproxy: d getClass() getName())
begin = system currentTimeMillis()
for(int I =; iltcircle; i)
d request()
Salida del sistema println (calljavassisdynproxy: (hora actual del sistema Milli?s() start))
begin =system currentTimeMillis()
d = createJavassistBytecodeDynamicProxy()? //Prueba el proxy dinámico Javassist
Salida del sistema println(createJavassistBytecodeDynamicProxy: (System Cu?rrentTimeMillis() start))
Salida del sistema println(clase JavassistBytecodeDynamicProxy: d getClass()
getName())
begin = system currentTimeMillis()
for(int I =; iltcircle; i)
d request ()
Salida del sistema println(callJavassistBytecodeDynamicProxy: (System curr?entTimeMillis() start))
}
Regrese al directorio de optimización del rendimiento del programa Java para realizar sus programas Java son más rápidos y estables.
Recomendación del editor
Videotutorial de capacitación en programación Java
Videotutorial de capacitación práctica del marco avanzado J EE
Video didáctico práctico de desarrollo móvil J ME
Desarrollo y práctica de la tecnología de audio y vídeo Visual C
Tecnología de índice Oracle
Lishi Xinzhi/Article/program/Java/gj/201311/27830 p >