Google Guice vs JSR-299 CDI / Soudure
De la soudure, la JSR-299 Contextes Injection de Dépendance et de référence de mise en œuvre, se considère comme une sorte de successeur de Printemps et Guice.
CDI a été influencée par un certain nombre de Java cadres de, y compris Couture, Guice et au Printemps. Cependant, le CDI dispose de sa propre, très distincte, caractère: plus de typesafe de Couture, plus dynamique et moins orienté XML de Printemps, plus de web et de l'entreprise-application capable de Guice. Mais il ne pouvait pas avoir été un de ces sans inspiration, de la cadres mentionnés et beaucoup de collaboration et de travail acharné par la JSR-299 Groupe d'Experts (GE).
http://docs.jboss.org/weld/reference/latest/en-US/html/1.html
Ce qui fait de la Soudure plus capables d'applications d'entreprise par rapport à Guice? Quels sont les avantages ou inconvénients par rapport à Guice? Que pensez-vous de Guice AOP par rapport à Souder intercepteurs? Quid des performances?
Mon choix
En fin de compte j'ai décidé d'utiliser Guice parce que j'aime le propre modèle de programmation qui vient presque sans annotations d'ailleurs @Inject par défaut. Il est beaucoup plus facile d'utiliser des libs avec Guice qu'avec le CDI. L'AOP est également assez simple avec Guice.
- Pour info, CDI 2 est, comme de 2017-04. Voir: JSR 365: les Contextes et l'Injection de Dépendance pour Java 2.0. Soudure 3 est l'Implémentation de Référence.
Vous devez vous connecter pour publier un commentaire.
Avant d'essayer de répondre à votre question, permettez-moi d'ajouter un élément d'information important: La JSR 330 (
@Inject
) a été normalisée par l'Guice et le Printemps projets (annonce de Mai 2009) et est en cours de réutilisés dans la JSR 299. Cela couvre à la base DI mécanismes en termes de déclarer un point d'injection.Maintenant, revenons à la question - avec l'avertissement que j'ai beaucoup plus d'expérience avec le Printemps qu'avec Guice.
La capacité des entreprises à Souder
beans.xml
).Avantages /Inconvénients
Note: je vais essayer d'ajouter quelques éléments ici plus tard, mais cette réponse est déjà plus que ce que j'avais prévu, désolé.
Soudure/CDI
Guice/Printemps
AOP et les Intercepteurs
C'est un très très discuté, et je ne peut pas favoriser l'un sur l'autre. Ces deux mécanismes sont très puissants, mais exigent au moins un minimum de compréhension de l'application de l'architecture. Aussi un coup d'oeil à Les décorateurs et le déjà référencé Les événements. Il est préférable d'aller avec le bon outil, mais ne pas oublier que si un développeur a à travailler avec l'un de ces mécanismes, c'est une bonne chose si il/elle comprend le concept.
Performance
Malheureusement, je ne pouvais pas regarder dans cela, mais il ya quelques règles que j'ai essayer de suivre, en particulier lors de l'utilisation d'un cadre de travail qui vous donne beaucoup de fonctionnalités sans que vous vous en rendiez compte:
CDI (Soudure) n'a pas encore été largement utilisé, donc la comparaison est difficile à faire. Quelques points:
CDI pour Guice utilisateurs est une belle comparaison.
La caractéristique la plus importante CDI a opposé à Guice, c'est que c'est un standard partie de Java EE 6.
L'importance de cela ne peut pas être sous-estimée, car elle signifie que le CDI est la DI-standard, vous devez utiliser lors du codage d'applications web.
Un temps, j'ai eu un coup d'oeil à l'technologies pour être en mesure de déterminer comment nous pourrions avoir une base standard de distribution convenablement préparé, où l'on pouvait ajouter des modules supplémentaires à volonté ce qui pourrait remplacer la fonctionnalité existante sans avoir à changer les modules de base. I. e. ajouter un supplément de pot, et la fonctionnalité s'active automatiquement.
Il s'est avéré que la meilleure façon pour nous de le faire pour un code de base utilisée dans les ordinateurs de bureau et des applications web, a été d'utiliser des JSR 330 annotations pour notre code, et ensuite utiliser soit en CDI ou Guice (SVN, venir réel dès maintenant dans la version 3.0) que le moteur.
Après quelques projets que j'ai trouvé ce que j'aime le Guice configuration de mieux au lieu de l'opacité de la magie qui se passe dans la Soudure. En outre, j'ai trouvé que le moyen de faire ce que nous voulons comme décrit ci-dessus avec de la Soudure, j'ai la marque de la classe dans le bocal comme @Alternative, et puis une mention dans la beans.xml que je veux l'autre classe d'application (et qui n'est pas robuste contre le refactoring).
Mais, dans l'ensemble, JSR 330 nous permet de faire quelque chose qui a été très fastidieux et fragile avant (parce que
new
se lie très étroitement), et c'est une grande victoire. Je peux que recommander fortement la recherche en DI si vous avez besoin de ce genre.@Provides
à la place. Fonctionne beaucoup mieux que@Alternative
.Un autre facteur de différenciation, c'est que le CDI est très Java EE orienté. Il fournit un mécanisme pour colle les différents Java EE sous-systèmes ensemble.
Ie. En annotant un haricot avec
@Named("book")
, la fève devient connu dans le unifiée EL (Expression Language) comme"book
'.Ensuite, vous pouvez l'utiliser dans une page JSF par exemple:
J'ai utilisé Guice dans une AWS Lambda sans serveur d'application. AWS recommande l'utilisation de Guice ou coup de Poignard au cours du Printemps dans une fonction Lambda. Voir AWS Lambda meilleures pratiques
La principale raison est que Guice et le Poignard sont plus petits cadres et accélérer le temps de démarrage, ce qui est essentiel Lambda.
Bien que l'OP n'a pas mentionné le Printemps, Printemps et en CDI/soudure sont conçus pour les applications de niveau entreprise, qui nécessitent souvent des fonctionnalités supplémentaires que ces cadres fournir. Donc pour les petites applications, qui ne nécessitent DI, Guice ou une Dague serait optimal.