Les annotations ont leur utilité, mais elles ne sont pas la solution miracle pour tuer la configuration XML. Je recommande de mélanger les deux!
Par exemple, si vous utilisez Spring, il est tout à fait intuitif d'utiliser XML pour la partie d'injection de dépendances de votre application. Cela éloigne les dépendances du code du code qui l'utilisera, en revanche, l'utilisation d'une sorte d'annotation dans le code qui a besoin des dépendances rend le code conscient de cette configuration automatique.
Cependant, au lieu d'utiliser XML pour la gestion transactionnelle, marquer une méthode comme transactionnelle avec une annotation est parfaitement logique, car il s'agit d'informations qu'un programmeur souhaiterait probablement connaître. Mais qu'une interface va être injectée en tant que sous-typeY au lieu d'un sous-typeX ne doit pas être incluse dans la classe, car si maintenant vous souhaitez injecter SubtypeX, vous devez changer votre code, alors que vous aviez un contrat d'interface avant de toute façon, donc avec XML, il vous suffit de modifier les mappages XML et c'est assez rapide et indolore de le faire.
Je n'ai pas utilisé les annotations JPA, donc je ne sais pas à quel point elles sont bonnes, mais je dirais que laisser le mappage des beans à la base de données en XML est également bon, car l'objet ne devrait pas se soucier de l'origine de ses informations. , il devrait juste se soucier de ce qu'il peut faire avec ses informations. Mais si vous aimez JPA (je n'ai aucune expérience avec lui), allez-y.
En général: si une annotation fournit des fonctionnalités et agit comme un commentaire en soi, et ne lie pas le code à un processus spécifique afin de fonctionner normalement sans cette annotation, optez pour les annotations. Par exemple, une méthode transactionnelle marquée comme étant transactionnelle ne tue pas sa logique de fonctionnement et sert également de bon commentaire au niveau du code. Sinon, ces informations sont probablement mieux exprimées en XML, car même si elles affecteront éventuellement le fonctionnement du code, elles ne changeront pas la fonctionnalité principale du code et n'appartiennent donc pas aux fichiers source.
@Component
et@Autowired
, c'est une fausse dichotomie. Il existe d'autres moyens de créer votre configuration, notamment JavaConfig et groovy config.