Vous êtes sur la page 1sur 13

Casablanca ,le 10/10/2023

EMSI Filière :5IIR


Mme Mariam CHERRABI

Architecture des Composants d’Entreprise


- IOC et ID -
- Généralités et Prise en Main - Partie 2

TP2 –IOC -ID

Thèmes :
1. ACE : Inversion de Contrôle (IoC)
2. ACE : Injection des Dépendances (ID)

1 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Atelier 1 IOC et ID By Doing -Partie 2-
Partie 1 :
Objectif : Vers un Couplage faible. Fichier de Configuration « .txt »

Activité 1 : Ouvrir le projet nommé « TP1-ACE-IOC »qu’on a créé au niveau de la

partie 1 du TP ( Fichier TP : ACE_TP1-Partie1_23_24.pdf ).

 Question 1 : Expliquer les problèmes, liés au couplage fort, présentés par la

structure actuelle du projet « TP1-ACE-IOC ».

Activité 2 : On Propose de créer un fichier «config .txt » au niveau de la source du

projet, ce fichier jouera le rôle d’un fichier de configuration :

2 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Le fichier doit contenir les noms des classes implémentant les interfaces selon

l’utilisation demandée.

 Question 1 : Expliquer l’apport de ce fichier concernant le couplage fort au

niveau de notre projet .

Activité 3 : Afin de pouvoir utiliser le fichier « config.txt » , la classe « Pres2» se

présentera ainsi :

 Question 1 : Expliquer les différentes lignes [20 – 34].

3 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Activité 4 : Sur la classe « Pres2 »,

 Question 1 : Essayer d’utiliser la méthode « setData » définie au sein de la

classe « MetierImpl » et ce afin de lier les objets « metier » et « data » .

 Question 2 : A votre Avis, pourquoi un tel comportement du programme ?

Activité 5 :

 Question 1 : Proposer une version de la classe « Pres2 » en changeant le corps

de la méthode « MetierImpl » , cette dernière utilise cette fois un constructeur

a un argument pour injecter l’objet « data » .

4 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Partie 2 :
Objectif : Vers un Couplage faible . Fichier de Configuration « .xml »

Activité 1 :

 Question 1 : Donner des limitations concernant l’utilisation d’un fichier « .txt ».

 Donner un exemple.

Activité 2 : On propose d’utiliser un fichier « .xml » afin de remédier à ces limitations.

Spring implémente cette solution en proposant une structure bien définie.

Avant de procéder, il est nécessaire de rajouter les dépendances de base de spring

sur votre projet .

 Question 1 : Sur le fichier « pom.xml » ,ajouter vers la fin du corps de la balise

« Projects » une sous balise « dependancies ».

 Question 2 : Aller sur l’adresse :

 Question 3 : Rechercher respectivement par les mots clés :

 Spring-core
 Spring-Context
 Spring-beans

Après chaque recherche, choisir l’avant dernière version pour éviter les problèmes de

stabilité :

5 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Exemple pour le premier mot clé :

 Question 4 : Copier la partie concernant le projet de type « Maven » pour le


coller sur votre fichier « .pom.xml », On rajoute cette dépendance dans la
balise « dependencies »

Activité 3 :Une fois le projet configuré et les dépendances de spring installées, on


procède l’implémentation de la nouvelle solution avec un couplage faible .

Spring propose de définir un fichier de configuration « .xml »

6 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
 Question 1 : Sur le dossier « Resources », Rajouter un fichier de type « Spring
Config »:

 Question 2 : Sur ce fichier crée, Rajouter les lignes [5-10] suivantes :

7 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Activité 4 : Afin d’éviter d’écraser le code des autres solutions vues ultérieurement,

 Question 1 : Créer une nouvelle classe « PresSpringXml » :

Activité 5 :On suppose que la classe « metierImpl » gère l’injection des dépendances
via un constructeur à un seul argument.

 Question 1 : Expliquer les changements à apporter au niveau de la solution


spring via le fichier « xml »

8 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Partie 3 :
Objectif : Vers un Couplage faible . Les annotations avec Spring

Dans le cadre du principe IOC, permettant de « Déléguer la mise en place des


exigences techniques au Framework »

Ce TP prendra en charge le « Framework spring » .

Spring propose une multitude d’annotations pour faciliter le travail pour les
développeurs afin de se concentrer sur la partie fonctionnelle tout en assurant un
couplage faible .

Ainsi, on procède ainsi :


Activité 1 :

 Question 1 : Au niveau des classes des objets qu’on va utiliser par la suite, on
rajoute directement l’annotation « @Component »

9 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
 Question 2 : On procède de la même manière au niveau de la classe «
DataImpl1 » et toutes les implémentations de l’interface IData .
Activité 2 :

 Question 1 : On rajoute la même annotation au niveau des implémentations de


l’interface « IMetier »

10 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Activité 3 :Afin d’assurer l’injection des dépendances » mise en œuvre au niveau des
solutions précédentes. Spring propose de rajouter l’annotation « @Autowired »

 Question 1 : Rajouter cette annotation comme suit :

11 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Activité 4 :

 Question 1: Finalement, rajouter une nouvelle classe


« PresSpringAnnotation».

La mise en œuvre des changements apportés se présente ainsi :

Les deux informations, passées en paramètre au constructeur de la


classe« AnnotationConfigApplicationContext », représentent les deux packages qui
englobent, respectivement, les classes des objets annotés par « @Component ».

 Question 2 : Exécuter la fonction main dans la classe « PresSpringAnnotation »


.

Activité 5 : On suppose que le même package « data » contient deux implémentation


de l’interface IData :

Le nom du Package n’est plus suffisant pour définir la classe à utiliser, et ce comme
précisé sur la couche présentation :

12 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23
Afin de lever la confusion, l’annotation « @Component » sera accompagnée par une
étiquette .

 Question 1 : Rajouter une étiquette « data1 » comme suit :

On applique la même méthode sur les classes présentant une confusion.

 Question 2 : Ainsi, on rajoute l’annotation « @Qualifier » (voir la figure ci-


dessous » au niveau de la classe « metierImpl », et ce afin de définir la classe
choisie :

Activité 5 :On suppose que la classe « metierImpl » gère l’injection des dépendances
via un constructeur à un seul argument (voir l’activité 5 de la partie 1)

 Question 1 : Expliquer les changements à apporter au niveau de la solution


« spring via les annotations ».

13 -TP1-2 : ACE | Inversion de Contrôle / Injection des Dépendances - Mme M.CHERRABI 10/10/23

Vous aimerez peut-être aussi