Les raisons de préférer Service Locator plus de l'Inversion de Contrôle (IoC) sont:
1) Service Locator est beaucoup, beaucoup plus facile pour d'autres personnes de la suite dans votre code. Cio est la "magie", mais l'entretien des programmeurs doivent comprendre vos alambiqué Printemps des configurations et toutes les myriade de lieux à comprendre comment vous wired vos objets.
2) le Cio est terrible pour le débogage des problèmes de configuration. Dans certaines classes d'applications, l'application ne démarre pas lorsque mal configuré et que vous ne pouvez pas obtenir une chance de l'étape par le biais de ce qui se passe avec un débogueur.
3) le Cio est principalement basé sur XML (Annotations améliorer les choses, mais il y a encore beaucoup de XML). Cela signifie que les développeurs ne peuvent pas travailler sur votre programme, à moins qu'ils connaissent la magie balises définies par le Printemps. Il n'est pas assez bon à savoir Java plus. Ce entrave le moins d'expérience des programmeurs (ie. c'est en fait une mauvaise conception de l'utilisation d'un plus compliqué solution quand une solution plus simple, tels que le Service de localisation, à satisfaire aux mêmes exigences). De Plus, le soutien pour le diagnostic de XML problèmes est beaucoup plus faible que le support de Java problèmes.
4) l'injection de Dépendance est plus adapté pour les grands programmes. La plupart du temps, la complexité n'est pas la peine.
5) Printemps est Souvent utilisé dans le cas où vous "pouvez changer la mise en œuvre plus tard". Il y a d'autres façons d'y parvenir sans la complexité de Printemps du Cio.
6) Pour les applications web (Java EE Guerres), le Ressort contexte est effectivement lié au moment de la compilation (sauf si vous voulez les opérateurs de grub autour du contexte dans le schéma de la guerre). Vous pouvez faire de Printemps de l'utilisation de la propriété des fichiers, mais avec des servlets propriété fichiers doivent se trouver à un emplacement prédéterminé, ce qui signifie que vous ne pouvez pas déployer plusieurs servlets le même temps sur la même case. Vous pouvez utiliser le Printemps avec JNDI pour modifier les propriétés à servlet temps de démarrage, mais si vous êtes en utilisant JNDI pour l'administrateur-modifiable dans les paramètres de la nécessité pour le Printemps lui-même diminue (depuis JNDI est effectivement un Localisateur de Service).
7) Avec le Printemps, vous pouvez perdre le Contrôle du programme si le Printemps est en train d'envoyer à vos méthodes. C'est pratique et travaille pour de nombreux types d'applications, mais pas tous. Vous pouvez avoir besoin de contrôler le flux de programme lorsque vous avez besoin pour créer des tâches (threads, etc) lors de l'initialisation ou de la nécessité modifiables ressources que le Printemps ne connaissais pas wehen le contenu est lié à votre GUERRE.
Le printemps est très bonne pour la gestion des transactions et a quelques avantages. C'est juste que le Cio peut être plus de génie dans de nombreuses situations, et d'introduire injustifiée de la complexité pour les responsables. Ne pas utiliser automatiquement Cio sans penser à des façons de ne pas l'utiliser en premier.