java - mvc - ¿Cuáles son los pros/contras de las anotaciones(no compilador) en comparación con los archivos de configuración xml?
spring java tutorial (3)
Creo que la decisión se reduce al "ciclo de vida" y al desajuste de impedancia entre los ciclos de vida.
Ciclo de vida: cada pieza de datos, ya sea su código fuente, una fila de la base de datos, una clase compilada, un objeto, tiene un ciclo de vida asociado. ¿Cuándo nace y cuándo se recolecta la basura?
Supongamos que pongo las anotaciones de Hibernate en una clase de Java. Parece una idea razonable, especialmente si estoy creando una nueva base de datos desde cero y estoy seguro de que solo esta aplicación se conectará a ella: los ciclos de vida de mis clases, el esquema de la base de datos y la asignación de ORM están naturalmente sincronizados.
Ahora suponga que quiero usar esa misma clase en una API y dársela a un tercero para que la consuma. Las anotaciones de Hibernate se filtran en mi API. Esto sucede porque el ciclo de vida de esa clase y la base de datos no son lo mismo. Así que terminamos usando herramientas de mapeo para traducir entre capas de beans en un sistema.
Intento pensar en los ciclos de vida y que se deben evitar las anotaciones que pueden causar desajustes en el ciclo de vida. Algunas anotaciones son relativamente inofensivas a este respecto, y algunas son un peligro oculto.
Ejemplos de anotaciones erróneas : asignación de ORM, configuración de base de datos, configuración codificada para los elementos que pueden variar entre los entornos de implementación, validaciones que pueden variar según el contexto.
Ejemplos de anotaciones inofensivas: definiciones de punto final REST, serialización JSON / XML, validaciones que siempre se aplican.
Cuando veo marcos de Java como Hibernate, JPA o Spring, generalmente tengo la posibilidad de hacer mi configuración a través de un archivo xml o poner anotaciones directamente en mis clases.
Me estoy preguntando cosistentemente qué camino debo seguir.
Cuando uso anotaciones, tengo la clase y su configuración juntas, pero con un xml obtengo una imagen más amplia de mi sistema porque puedo ver todas las configuraciones de clase.
Las anotaciones también se compilan de alguna manera, supongo, y deberían ser más rápidas que analizar el xml, pero, por otro lado, si quiero cambiar mi configuración, tengo que volver a compilarla en lugar de simplemente cambiar el archivo xml (lo que podría ser aún más útil para entornos de producción en el lado del cliente).
Entonces, cuando miro mis puntos, tiendo a ir por el camino xml. Pero cuando miramos en foros o tutoriales usualmente se usan anotaciones.
¿Cuáles son sus pros y sus contras?
Si está escribiendo una API, entonces una advertencia: Las anotaciones pueden filtrarse en su interfaz pública, lo que puede ser increíblemente exasperante.
Actualmente estoy trabajando con API, donde el proveedor de API ha salpicado su implementación con las anotaciones de Spring MBean
, lo que de repente significa que tengo una dependencia de las bibliotecas de Spring, a pesar de la posibilidad de que no necesite utilizar Spring en absoluto :(
(Por supuesto, si su API era una extensión de Spring, esto podría ser una suposición válida).
Una buena regla general: cualquier cosa que pueda ver a usted mismo queriendo cambiar sin una redistribución completa (p. Ej., Ajustar los parámetros de rendimiento) debería incluir algo "configurable por software", como un archivo XML. Cualquier cosa que nunca vaya a cambiar de forma realista, o solo en el tipo de situación en la que tendrá que cambiar el código de todos modos, puede estar razonablemente en una anotación.
Ignore cualquier idea de las diferencias de rendimiento entre anotaciones y XML, a menos que su configuración sea absolutamente masiva, la diferencia será insignificante.
Concéntrate en la flexibilidad y la legibilidad.