Bonjour,
J'ai un problème pour comprendre la notion d'injection des dependences? Quelle est son principe travail.
J'attends vos réponses et merci.
Version imprimable
Bonjour,
J'ai un problème pour comprendre la notion d'injection des dependences? Quelle est son principe travail.
J'attends vos réponses et merci.
Salut,
L'IoC (Inversion of Control) est un pattern d'architecture d'application qui consiste à laisser le framework gérer l'exécution de l'application : on lui fourni des bouts de code et le framework organise leur exécution. On parle de cycle de vie de composant (initialisation, démarrage, etc) géré par le framework.
L'IoD (Inversion of Dependancy) est une manière de faire de l'IoC.
En programmation classique, un composant va aller demander à un autre (par exemple un gestionnaire, celui d'un framework qu'on utilise pour nous aider à construire l'application sans tout réécrire) un composant qu'il a besoin. Par exemple, un composant de traitement quelconque (mettons un Dao) va avoir explicitement dans son code un appel d'une méthode pour connaître le logger de l'application afin de loguer des messages (erreurs, warning, info...).
En IoD, c'est le framework qui va injecter (comprendre affecter à un moment donné, souvent une étape d'initialisation ou de démarrage dans un cycle de vie de composant géré par le framework) le composant de logging, parce qu'il y a une information quelque part (dans un fichier de config ou via une annotation) qui dit que le composant voudrait pouvoir logger.
Le but étant de découpler les composants (favoriser l'isolation) : ils n'ont plus besoin de références directes aux fournisseurs de composants (gestionnaires). Ils n'ont juste qu'à dire qu'ils en ont besoin. Il n'y a plus de dépendances techniques : le composant va dire qu'il a besoin de loguer. Que le log soit en base de données, dans un fichier ou autre, le composant s'en moque.
Le système d'injection de dépendance s'occupe d'injecter dans une classe qui le demande une instance d'une autre.
Avant, on faisait un new UnObjet(...) ou un session.getAttribute("UnNom") etc... pour récupérer une instance
Avec CDI, on marque la référence dans la classe et le système s'occupe d'injecter ce qu'il faut (dans la mesure où ce qu'on lui demande d'injecter est bien dans son domaine)
Code:
1
2
3
4
5
6
7 @Named @SessionContext class UnManagedBean { ... }
Dans cet exemple, le deuxième bean reçoit l'instance de UnManagedBean lié à la session en cours de l'utilisateur qui fait la requête.Code:
1
2
3
4
5
6
7
8 @Named @RequestContext class MonObjet { @Inject private UnManagedBean monManagedBean; }
Là, c'est juste le niveau 1 de l'injection de dépendance, je te suggère de lire ce tutoriel sur CDI pour avoir une vue plus générale de ce qu'on peut faire ;)