Las anotaciones tienen su uso, pero no son la única bala de plata que mata la configuración XML. ¡Recomiendo mezclar los dos!
Por ejemplo, si usa Spring, es completamente intuitivo usar XML para la porción de inyección de dependencia de su aplicación. Esto aleja las dependencias del código del código que lo usará, por el contrario, el uso de algún tipo de anotación en el código que necesita las dependencias hace que el código sea consciente de esta configuración automática.
Sin embargo, en lugar de usar XML para la gestión transaccional, marcar un método como transaccional con una anotación tiene mucho sentido, ya que esta es una información que un programador probablemente desearía saber. Pero que una interfaz va a ser inyectada como SubtypeY en lugar de SubtypeX no debe incluirse en la clase, porque si ahora desea inyectar SubtypeX, debe cambiar su código, mientras que de todos modos tenía un contrato de interfaz. con XML, solo necesitaría cambiar las asignaciones de XML y es bastante rápido e indoloro hacerlo.
No he usado anotaciones JPA, por lo que no sé qué tan buenas son, pero diría que dejar el mapeo de beans a la base de datos en XML también es bueno, ya que al objeto no debería importarle de dónde proviene su información , debería importarle lo que puede hacer con su información. Pero si te gusta JPA (no tengo ninguna experiencia con él), por supuesto, anímate.
En general: si una anotación proporciona funcionalidad y actúa como un comentario en sí mismo, y no vincula el código a algún proceso específico para que funcione normalmente sin esta anotación, entonces busque anotaciones. Por ejemplo, un método transaccional marcado como transaccional no mata su lógica operativa y también sirve como un buen comentario a nivel de código. De lo contrario, esta información probablemente se exprese mejor como XML, porque aunque eventualmente afectará la forma en que funciona el código, no cambiará la funcionalidad principal del código y, por lo tanto, no pertenece a los archivos fuente.
@Component
y@Autowired
, esta es una dicotomía falsa. Hay otras formas de crear su configuración, incluyendo JavaConfig y groovy config.