Pendant longtemps, j'ai cru qu'il y avait une valeur dans le fait d'avoir un "centralisé, déclarative, la configuration" comme les fichiers xml, nous avons tous l'habitude d'utiliser. Puis j'ai réalisé que la plupart des choses dans les fichiers n'était pas de configuration n'a jamais été changé partout après le développement, jamais. Puis j'ai réalisé que "centralisé" n'a de valeur que dans les très petits systèmes - seulement dans les petits systèmes allez-vous être en mesure d'analyser un fichier de configuration dans son ensemble. Et ce qui est vraiment la valeur de la compréhension du câblage de l'ensemble, quand même "câblages" sont pour la plupart reproduits par les dépendances dans le code? Donc, la seule chose que j'ai gardé est de méta-données (annotations), qui est encore de type de déclaratif. Ces jamais changer lors de l'exécution et ils sont jamais "configuration" données que quelqu'un va changer à la volée, donc je pense le garder dans le code est agréable.
J'utilise plein d'auto-câblage autant que je le peux. Je l'aime. Je ne vais pas revenir à l'ancienne printemps, à moins menacé à l'arme de point. Mes raisons pour préférer entièrement @Autocâblés ont changé au fil du temps.
Maintenant, je pense que la raison la plus importante pour l'aide permettra à l'autowiring est qu'il y a un moins d'abstraction dans votre système pour garder une trace de. Le "haricot nom" est effectivement disparu. Il s'avère que la fève de nom n'existe que parce que de xml. Ainsi, une couche complète de l'abstrait indirections (où vous fil bean-name "foo" en haricot "bar") a disparu. Maintenant, je fil "Foo" de l'interface dans mon haricot directement, et la mise en œuvre est choisi par le moment de l'exécution du profil. Cela me permet de travailler avec le code lors du traçage des dépendances et des implémentations. Quand je vois un autocâblés dépendance dans mon code je peux juste appuyer sur "aller à la mise en œuvre" dans mon IDE et vient jusqu'à la liste des implémentations. Dans la plupart des cas, il y a juste une mise en œuvre et de je suis de droite dans la classe. Ne peut pas être beaucoup plus simple que cela, et je sais toujours exactement ce que la mise en œuvre est en cours d'utilisation (je demande que l'inverse est plus proche de la vérité avec xml câblage - drôle de voir comment votre point de vue change!)
Maintenant, vous pourriez dire que c'est juste une très simple couche, mais chaque couche d'abstraction que nous ajoutons à nos systèmes d' augmentation de la complexité. Je ne pense vraiment pas que le xml jamais ajouté une valeur à tout système qui j'ai travaillé.
La plupart des systèmes que j'ai jamais travailler avec seulement une configuration de la production de l'environnement d'exécution. Il y a peut être d'autres configurations de test et ainsi de suite.
Je dirais que complet permettra à l'autowiring est le ruby-on-rails de printemps: Il embrasse la notion qu'il y a une normale et courante du schéma d'utilisation que la plupart des cas d'utilisation à suivre. Avec XML de configuration vous permettent beaucoup de cohérent/incohérent de configuration de l'utilisation qui peut/ne peut pas être prévu. J'ai vu tellement de configuration xml aller à la mer avec des incohérences - t-il faire remaniée avec le code ? Ne pensais pas. Sont ces variations sont là pour une raison? Généralement pas.
Nous avons à peine utiliser des qualificatifs dans notre configuration, et trouvé d'autres moyens pour résoudre ces situations. C'est clairement un "inconvénient" que nous rencontrons: Nous avons légèrement changé la façon dont nous le code pour le faire interagir plus lisse avec permettra à l'autowiring: Un référentiel client implémente plus le générique Référentiel<Client> interface, mais nous faisons une interface CustomerRepository qui s'étend Référentiel<Client>. Parfois, il y a aussi un truc ou deux quand il s'agit de sous-classement. Mais il y a généralement que des points dans le sens d'un renforcement de typage, qui je trouve est presque toujours une meilleure solution.
Mais oui, vous êtes à l'aide d'un style particulier de DI que la plupart de printemps. Nous n'avons même pas rendre public les setters pour les dépendances de plus (Donc on pourrait dire que nous sommes +1 dans l'encapsulation/se cacher de l'information service), Nous avons encore un peu de xml dans notre système, mais le xml fondamentalement seulement contient les anomalies. Complet permettra à l'autowiring s'intègre bien avec xml.
La seule chose dont nous avons besoin maintenant, c'est de la @Composant, @Autocâblés et le reste pour être inclus dans une JSR (comme JSR-250), donc nous n'avons pas de lien avec le printemps. C'est la façon dont les choses ont été faits dans le passé (la java.util.simultanées truc me vient à l'esprit), donc je ne serais pas surpris si c'est arrivé de nouveau.