Cómo utilizar la sección de actualización de beanutils.copyproperties;
Anteriormente, al escribir un programa, usaba el método de copiar dos objetos de diferentes tipos pero con básicamente las mismas propiedades. Como resultado, al copiar las propiedades del objeto de tipo java.util.Date, el valor estaba vacío y se lanzó una excepción.
Debido a que el tiempo apremia, utilicé temporalmente el método get/set. Afortunadamente, no hay muchos atributos de objeto.
He estado preocupado por este problema desde entonces. Hoy me tomé el tiempo para observar la implementación de BeanUtils.copyProperties en los paquetes spring y apache commons-beanutils.
La implementación de Spring es muy simple, simplemente obtiene/establece una propiedad con el mismo nombre en ambos objetos y solo verifica la accesibilidad de la propiedad.
Commons-beanutils realiza una gran cantidad de comprobaciones, incluida la conversión de tipos e incluso la comprobación de la accesibilidad de la clase a la que pertenece el objeto.
Además, commons-beanutils no admite java.util.Date y java.sql.Time. Fecha, java.sql.Time, java.sql.TimeStamp, java.io.File, javaio.URL y otros tipos excepto tipos primitivos y matrices de tipos primitivos. Pero puedes personalizar el Convertidor de la clase y registrarlo.
Creo que el método copyProperties de la clase BeanUtils en el paquete commons-beanutils es demasiado complejo, tiene demasiadas restricciones y es incómodo de usar. Aunque tiene buena escalabilidad, no es fácil de usar. .
Resumen:
Con respecto a la copia de beans, si hay pocos atributos, se recomienda escribir directamente un método para completar get/set. Si hay muchos atributos, puede usar la reflexión para implementar clases de herramientas que satisfagan sus necesidades, o usar la clase beanutils de Spring. No se recomienda usar la clase BeanUtils en el paquete commons-beanutils. Habrá problemas con la copia de objetos de clase estáticos internos. El problema es que la prueba es demasiado compleja y a menudo ocurren problemas extraños. Después de todo, nuestra copia de beans suele ser solo una simple copia de propiedad.
Además, dado que estas clases de BeanUtils se implementan utilizando el mecanismo de reflexión, también tendrán un impacto en la eficiencia del programa. ¡¡¡Así que use BeanUtils.copyProperties con precaución !!!!