mai
2009
Lors que les termes Injection de dépendances sont cités, deux projets sont souvent pointés du doigts : Spring et Guice.
Le premier est Spring Framework qui à largement contribué à la popularisation de ce concept. Le principe original de celui-ci était de créer des POJOs, et de lier ceux-ci via un fichier XML.
L’intérêt premier était que les classes était très peu liées ni même au framework Spring.
Quelques temps plus tard, Google Guice est arrivé avec une autre technique.
Le(s) fichier(s) XML devenant parfois très long, et n’était pas directement géré par les outils de refactoring, un sytème d’injection basé sur des annotations fut préféré par Google.
Ce système gagna un certains succès, et SpringSource à donc repris l’idée en proposant un set d’annotations aussi pour gérer les dépendances.
Que l’on aime ou pas les annotations, elles ont un gros défaut : elles lient directement le code métier au framework d’injection de dépendances !
Afin de résoudre ce problème, les deux Gurus ont décidé de travailler ensemble sur une nouvelle JSR pour standardiser l’injection de dépendance.
Pour l’instant, cette JSR ne comporte qu’un jeu très restreint d’annotation :
- @Inject
- @Qualifier
- @Scope
- @Named
- @Singleton
Je trouve cette initiave intéressante, mais il faut encore voir quelles fonctionnalités des frameworks seront mis en place dans cette JSR.
Spring, et certainement Guice, proposent plus que de l’injection de dépendance ( AOP, gestion des transaction, … ).
Si la JSR se limite à l’injection, on finira tout de même par utilisé des fonctions propres à l’implementation .. et donc le code ne sera de nouveau liés à un framework.
Plus d’information :
Blog Google
Blog de Nicolas De Loof
Draft de la spécification
un peu barbare : oui, j’avoue, et effectivement, ca sera nikel quand ca sera integré a javaSE
Je suis d’accord, mais c’est un peu barbare comme solution
Si un jour les annotations standards sont intégré à Java, c’est moins contraignant, la compilation passera sans avoir à ajouter des Jars.
mais non ! on est pas lié par une annotation, ce n’est qu’une meta information ! si le @transactionnal te genne par exemple, tu remplaces le jar du framework d’origine par un jar home made qui contient la meme annotation, qui ne fait rien, et le tour est joué.