Chapitre 10. CDI

10.1. CDI

10.1.2. CDI (Contexts and Dependency Injection)

DCI (Context and Dependency Injection) est une spécification conçue pour permettre aux composants EJB 3.0 "d'être utilisés comme beans JSF (java Server Faces), réunissant les deux modèles de composants et permettant la simplification du modèle de programmation des applications basées-web dans Java". La citation suivante est extraite de la spécification JSR-299, que l'on peut trouver à http://www.jcp.org/en/jsr/detail?id=299.
JBoss EAP 6 inclut Weld, qui est l'implementation de référence de JSR-299. Pour obtenir plus d'informations sur l'injection de dépendance type-safe, voir Section 10.1.4, « Injection de dépendance de Type-safe ».

10.1.3. Avantages de CDI

  • CDI simplifie et rétrécit votre base code en remplaçant des gros morceaux de code par des annotations.
  • CDI est flexible, ce qui vous permet de désactiver ou d'activer des injections et des événements, d'utiliser des autres beans, ou d'injecter des objets non-CDI facilement.
  • Il est facile d'utiliser votre ancien code avec CDI. Vous n'avez qu'à y inclure un beans.xml dans votre répertoire META-INF/ ou WEB-INF/. Le fichier peut être vide.
  • CDI simplifie le packaging et les déploiements, et réduit le montant d'XML que vous aurez besoin d'ajouter à vos déploiements.
  • CDI propose une gestion du cycle de vie par contexte. Vous pouvez lier des injections aux requêtes, sessions, conversations, ou contextes personnalisés.
  • CDI propose une injection de dépendance type-safe, qui est plus sécurisée et facile à débogger qu'une injection basée string.
  • CDI découple les intercepteurs des beans.
  • CDI fournit une notification d'événements complexe.

10.1.4. Injection de dépendance de Type-safe

Avant JSR-299 et DCI, la seule façon d'injecter des dépendances dans Java était par chaînes. Cela portait à erreur. DCI a introduit la possibilité d'injecter des dépendances d'une manière plus sûre.

10.1.5. Relation entre Weld, Seam 2, Seam 3, et JavaServer Faces

Le but de Seam 2 était d'unifier les beans gérés Enterprise Java Beans (EJBs) et JavaServer Faces (JSF).
JavaServer Faces (JSF) implémente JSR-314. Il s'agit d'un API qui construit les interfaces utilisateur côté serveur. JBoss Web Framework Kit inclut RichFaces, qui est une implémentation de JavaServer Faces et d'AJAX.
Weld est l'implémentation de référence de Contexts and Dependency Injection (CDI), définie dans JSR-299. Weld est inspiré de Seam 2 et d'autres frameworks d'injection de dépendances. Weld est inclus dans JBoss EAP 6.