Si je comprends bien, il y a deux avantages principaux aux contrôleurs annotés au printemps: p>
Cela semble apporter deux inconvénients principaux, cependant: p>
Bien que je considère personnellement les inconvénients susmentionnés pour l'emporter sur les avantages, l'utilisation d'annotations semble être préférée. Cela m'amène à la question: Pourquoi les contrôleurs annotés de printemps sont-ils préférables aux mappages traditionnels? Strong> p>
Modifier en ce qui concerne le couplage: p>
Je me rends compte que dans les deux situations, il y a un couplage avec le cadre sous-jacent impliqué. L'interface code> contrôleur code> requise par le ressort est constituée d'une méthode unique et pourrait être principalement abstraite (par exemple, une interface MyController s'étend SpringController code>). Les annotations d'autre part, en dehors d'être spécifique au cadre, nécessitent un tas d'importations dans chaque fichier. P>
5 Réponses :
Je ne pense pas qu'un seul fichier est plus facile à maintenir. Un grand que j'ai trouvé est que les annotations vous permettent d'utiliser des objets dans plus que du projet et qu'ils apportent leur configuration avec eux. Je n'ai pas besoin de modifier la source, puis de me souvenir de chaque projet qui l'utilise et de la correction de leurs fichiers de configuration. Cela crée une manière plus modulaire de penser et de développer. P>
Le couplage est plus souple. Une classe annotée ne dépend pas des méthodes ou des interfaces de classe des parents et peut être encapsulée dans une classe conforme à n'importe quel cadre, si vous choisissez ultérieurement de migrer. Vous aurez toujours besoin de supprimer les annotations de la plupart des compilateurs, mais le code et la logique ne devront pas être modifiés, seulement complétés pour fournir les paramètres et l'écoulement d'appels de la même manière à Spring @ MVC. P> Li>
Cela dépend du type et de l'échelle de la maintenance si on est plus perturbateur que l'autre. Si vous devez modifier la configuration des entités multiples, il est plus irritant pour passer à l'aide des différents fichiers Java dans la configuration annotée. Tandis que si vous refactez le contrôleur et que les URL changent changent, cela dans la classe Java serait moins perturbateur que de modifier un fichier XML distinct (qui contient de nombreuses lignes non applicables au changement effectué). P> LI > ol>
Il y a plusieurs avantages supplémentaires: P>
regroupement logique de plusieurs actions dans une seule classe de contrôleur (bien que cela soit aussi possible avec Simplification des tests d'unités, car dans la plupart des cas, vous pouvez passer des arguments simples et ne pas avoir besoin de préparer simule flexibilité supplémentaire de mappage avec Aussi, je ne peux pas être d'accord avec le premier désavantage - à mon avis, les annotations introduisent beaucoup moins de couplage que l'héritage. Par exemple, vous pouvez même utiliser un contrôleur annoté compilé comme une classe normale sans ressort dans la classe de classe (bien que la compilation du code source annoté nécessite toujours des annotations dans le chemin de construction). P> multicictioncontroller code>, mais pas si flexible) p> li>
httpservletQuest code> /
httpservletresponse code> s. P > li>
@requestparam code>,
@pathvariable code>, etc. (bien qu'il puisse être mis en œuvre dans des contrôleurs traditionnels, mais je pense pas si élégant que annotations dus à la nature statique des contrôleurs traditionnels). p> li>
ul>
Il suffit de mentionner que le test de printemps fournit les moqueurs requis pour la demande / la réponse. Mais toujours, c'est mieux sans eux.
Je reçois une erreur de compilation si je n'impose pas le code de ressort pertinent pour prendre en charge mes annotations.
@etheros: Je voulais dire forme compilée. Dans la forme compilée, des annotations inconnues sont ignorées.
Permettez-moi de discuter avec les inconvénients: P>
Ce n'est pas le cas. C'est des métadonnées qui peuvent facilement disparaître sans affecter la fonctionnalité. D'autre part, devoir prolonger certaines classes et utiliser leurs méthodes empêchent de se débarrasser de la structure plus tard. P> Li>
C'est la même chose. J'ai utilisé à la fois des approches et non plus mal. Avec les capacités de recherche IDE modernes, et avec des conventions de dénomination appropriées, il n'est pas tout aussi facile d'avoir un seul fichier de configuration. P> LI> ol>
En plus des réponses existantes, je pense que cela vaut la peine de mentionner que le printemps MVC a une séparation propre entre le gestionnaire mappings em> et le gestionnaire adaptateurs p>. P>.
L'ancien dicte quel manutentionnaire em> doit être invoqué pour une demande donnée, et ce dernier détermine comment em> ce gestionnaire doit être invoqué. P>
Un que l'un extrême, vous avez "Classic" printemps MVC, avec les mappages définis dans XML et l'adaptateur défini par la hiérarchie de la classe code> classique de style code>. À l'autre extrême, vous avez Cependant, il est parfaitement acceptable de mélanger et de faire correspondre. Par exemple, vous pouvez définir les mappages d'URL dans XML, "Old-style", mais toujours utiliser des classes de manutention code> -Controller CODE>. De cette façon, vous évitez de mettre des mappages d'URL dans les annotations (ce qui n'est pas toujours une bonne chose), qui conserve la flexibilité de la signature de classe considérablement améliorée (et une dépendance réduite à l'API de ressort) des annotations. P>
Cette capacité à mélanger des approches signifie que vous pouvez plutôt définir l'approche le mieux pour vous. P> @Controller code> et
@RequestMappage code>, avec tout défini dans les annotations. P>
Une meilleure question pour moi est «Pourquoi Springsource ne documente que l'approche d'annotation dans leur manuel de référence?». Ils ont supprimé la documentation de configuration MVC de style XML, que je trouve ennuyeux.
@skaffman Yup, c'est l'une des meilleures parties de la référence de printemps: Spring classique MVC :-)
@skaffman Ça devient droit au point :-)