Cómo mejorar la puntuación de Douban
2. Métodos estúpidos de obtención/configuración manual, lo más probable es que el código sea muy detallado e ilegible.
BeanCopier es parte del paquete API cglib.
Prueba de comparación de rendimiento de BeanCopier/BeanUtil. El rendimiento de BeanCopier es aproximadamente 450 veces mayor que el de BeanUtil.
Copia de BeanCopier = BeanCopier.create(Bean.class, Bean2.class, false
Fuente de Bean = new Bean()
Destino de Bean2 =); new Bean2();
long t = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
copiar .copy(source, target, null);
}
System.out.println(System.currentTimeMillis() - t); La construcción de BeanCopier consume mucho rendimiento, por lo que al realizar operaciones complejas, es mejor almacenar en caché los objetos ahora. De lo contrario, es probable que se produzcan los mismos problemas de rendimiento. Es mejor abandonar los dos métodos de copia que mencioné y utilizar el método BeanCopier proporcionado por CGLIB. Su rendimiento es de 10W COPIA en menos de 50ms. Este rendimiento es muy alto. El método BeanCopier.copy (fuente, destino, Convertir) puede proporcionar su propio procesamiento de atributos independiente. Para saber cómo usarlo, consulte la ayuda de cglib.
Este es un escenario de alta concurrencia con requisitos de alto rendimiento. Si su sistema no está bajo mucha presión, debe usar BeanUtil.
// En esta prueba, la clase Bean/Bean2 utilizó alrededor de 40 objetos de atributos. Hay muchos tipos.
//Código de prueba
importar java.lang.reflect.InvocationTargetException
importar org.apache.commons.beanutils.
importar net.sf.cglib.beans.BeanCopier;
clase pública CGLibTest {
public static void main(String[] args) {
copia de BeanCopier = BeanCopier.create(Bean.class, Bean2.class, false);
Bean fuente = new Bean()
Bean2 destino = new Bean2(); p> long t = System.
System.out.println( System.currentTimeMillis() - t
Bean source2 = new Bean(); > intente {
BeanUtils.copyProperties(fuente2, destino);
BeanUtils.copyProperties(fuente2, destino
} captura (IllegalAccessException e1) {
// TODO genera automáticamente un bloque de captura
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Generar automáticamente el bloque de captura
e1.printStackTrace();
}
t = System.currentTimeMillis()
for ( int i = 0; i < 100000; i++) {
intentar {
BeanUtils.copyProperties(fuente2, destino
} captura (IllegalAccessException e) {
// TODO Bloque catch generado automáticamente
e.printStackTrace()
} catch (InvocationTargetException e) {
// TODO bloque de captura generado automáticamente
e.printStackTrace();
}
}
System.out. .currentTimeMillis() - t
}
}
}