Bonnes pratiques Spring : Annotation vs XML
Bonjour tout le monde,
je travaille sur spring 3.0 et je me demandais s'il valait mieux passer par des annotations pour la déclaration des beans, transaction,... ou par des fichiers xml. Je suppose que c'est aussi long de prendre l'un ou l'autre en main, mais le xml me semble pour clair, ou plus maintenable que les annotations.
Je m'explique : l'avantage du fichier xml est de concentrer l'information à un seul endroit du projet au lieu de dispatcher les informations à droite à gauche dans la miriade de classes du projet. Du coup c'est peut être plus facile à maintenir plutôt que d'aller à la pèche au info lorsqu'il y a un problème.
Le but de ce post est de plutôt partager son avis sur la question et de bénéficier de retour d'expérience de personne ayant pu manipuler l'un ou l'autre.
j'aime déterrer les sujets...
Salut à tous,
je ré-ouvre le sujet car, sur mon projet actuel, nous avons avec un collègue un problème existentiel avec la conf spring.
Le contexte : un gros projet maven avec deux applis web, des webservices soap à exposer, d'autres à consommer, du spring batch, du hibernate/jpa...
Et en prime une grosse moulinette pour logguer toutes les méthodes publiques, via aop.
Initialement, j'avais conçu le bousin de telle façon que les définitions des beans spring soient dans des xml, groupés par "couche".
=> Déjà, par rapport à mon choix initial, je ne comprend pas les personnes qui décident de faire du full annotations "car le xml c'est mal" : pour moi, c'est du lobbying, il n'y a aucune vraie raison derrière cette phrase; les contextes spring en xml peuvent justement être séparés en plusieurs fichiers, facilement lisibles et compréhensibles, et importés dans une config globale. Ce qui est bien pratique dans le cadre d'un projet avec plein de modules maven.
Bref, à ce moment là, tout allait bien : on avait des config xml "cible", des configs spécifiques pour les TU, des configs "stubs"...
Et soudain, le drame : le "cp technique", plus habitué aux annotations, a cassé la configuration existante en remplaçant les définitions des beans par des annotations directement dans les classes, et en remplaçant du coup le contenu des xml par de simple "component-scan" sur mes packages contenant les beans...
Et c'est là ou j'aimerais partager un peu de notre retour d’expérience à ce sujet, car peut-être nous somme nous mal pris... Toujours est-il que, en gros, notre ressenti est que :
- les annotations empêchent de gérer facilement une conf spécifique aux tests. Dans notre cas, nous avions besoin de différencier tests unitaires et tests d'intégration, voire de faire des combinaisons de conf...
=> Bref, quoi qu'on en dise et je demande à ce qu'on me prouve le contraire, les configs xml permettent beaucoup plus de souplesse; (Comme il a été dit, les annotations devraient être limités aux éléments statiques)
- les annotations ont tendance à casser tout l'intêret de l'IoC : ce n'est pas à l'implémentation de dire "je suis tel bean" ou "tel attribut correspond à telle clé dans mon fichier de properties" ; faire ainsi reviens à peu de chose près à coder en dur ! Comment apeller mon bean dans une autre classe si je ne connais pas son nom ? Je dois lancer une recherche dans eclipse sur "@Service(monbean)" ? C'est abbérant ! Et si je change le nom de la clé du fichier de properties ?? Je dois là encore chercher dans le code les annotations qui utilisaient cette clé et la modifier... et on a tout cassé l’intérêt de l'IoC, le fait d'avoir les éléments dynamiques configurés en un seul point d'entrée, facilement lisible et adaptable...
Vos avis et retours d’expérience nous intéressent, merci d'avance. :mrgreen:
Je suis pas mal dans mon genre....
Bonjour, ce sujet m'interesse particulièrement et j'aurais aimé avoir l'avis de certains d'entre vous.
Alors, annotation ou config XML ?
Pour des gens peu ou "moyennement" expérimentés sur ce framework (et aux annotations), n'est il pas plus simple de faire du XML ?
Pourquoi le XM-Hell comme certains le disent est il si désagréable à vos yeux ? (qqun bosse t il avec du SGML, le XML est topissime à côté ^_^)
Merci par avance pour vos retours.