Vous êtes sur la page 1sur 5

Cycle de Formations

Technologique
avancées : Your partner of choice

Framework Spring
M. Belhassen OUESLATI
Ingénieur Java/J2EE

Travaux dirigés TD N°2

Utiliser Spring comme conteneur léger d’Ioc

Objectifs

 Développer un premier exemple de composants liés


 Détecter le besoin d'Ioc
 Appliquer Spring

Belhassen.oueslati@gmail.com Passage vers Spring


1. Exercice : Introduction de Spring
(Suite Cas pratique : « Gestion des contacts »)

1.1 Présentation du problème

 Nous allons utiliser Spring comme conteneur léger d’Ioc

L'élément manquant ici est le lien entre le service ContactService et la


façon avec laquelle il faut récupérer les données càd l'implémentation réelle
de contactDao.

 Or il s'agit ici d'une dépendance entre deux composants :


Une dépendance entre une implémentation de ContactService et une
implémentation contactDao.

 Nous allons utiliser le principe Ioc sous forme Setter injection

Voici l’interface ContactService : interface ContactService

public interface ContactService {

void ajouterContact(Contact contact);

Boolean supprimerContact (String numero);

List < Contact > recupererListContacts ();

Belhassen.oueslati@gmail.com Passage vers Spring


Voici la nouvelle implémentation de l’interface ContactService :
class ContactServiceImplementation

public class ContactServiceImplementation implements ContactService {

private ContactDao contactDao = new ContactDaoImp();

private ContactDao contactDao;


public void ajouterContact (Contact contact) {
Contact nouveauContact = null;

Etape d’initialisation de nouveauContact

contactDao.createContact(nouveauContact);
}

public boolean deleteContact(String numero) {

if (numero == null || numero.isEmpty())


{
Etape Génération d’une exception
}
return contactDao.deleteContact(numero);
}
public List < Contact > recupererListContacts () {

final List < Contact > contactList = contactDao.getListContacts();


return contactList;
}
getter/setter de contactDao

Commentaire :

 On remarque que l’implémentation de ContactService, ne connaît pas


l'implémentation réelle de contactDao.

 Ce lien, entre les deux implémentations réelles, sera apporté par le


conteneur, à l'initialisation (WIRING).

 A l'utilisation, ContactService, sera mise en relation avec un objet


"particulier" qui implémente l'interface contactDao.

Belhassen.oueslati@gmail.com Passage vers Spring


 Mais, comment faire comprendre au JRE cette idée ?

 Il suffit de deux étapes

A) Etape 1 : Déclaration XML : (fichier applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="ContactService"
class="com.spring.ContactServiceImp">
<property name="ContactDao">
<ref local="CompteBancaireDao" />
</property>
</bean>

<bean id="ContactDao"
class="com.spring.ContactDaoImpl">
</bean>

</beans>

Commentaire :

 On a définit ici un bean : ContactService, est un bean qui possède


une propriété : ContactDao.
 Or on a définit aussi un nouveau bean : ContactDao, et on a fixé son
type : com.spring.ContactDaoImpl

Belhassen.oueslati@gmail.com Passage vers Spring


B)Etape 2 : Chargement des beans et liens (wiring)

 La classe ContactServiceTest qui va utiliser le bean ContactService,


doit appeler Spring pour qu'il lui fabrique l'objet et qu'il assure la liaison
entre les composants.

Voici la nouvelle implémentation de la classe ContactServiceTest :

public class ContactServiceTest {

public static void main(String[] args) throws Exception {

ApplicationContext ctx = new ClassPathXmlApplicationContext(

"com/spring/applicationContext.xml");

ContactService cs =(ContactService)ctx.getBean("ContactService");

List < Contact > contactList = cs. recupererListContacts ;

Commentaire :

 Première étape :
 Chargement du fichier de config : applicationContext.xml

 Seconde opération :
 Récupération de l'objet avec tous ses liens :
ctx. etBean("ContactService ");

1.2 Réaliser l'exemple


 Exécuter la classe ContactServiceTest.java

1.3 Questions ?
 Comment faire pour changer l'implémentation de ContactDao sans changer
celle de ContactService?
 (Exemple : AnotherContactDaoImpl implements ContactDao)
 Réaliser le Test
 Créer une nouvelle configuration

Belhassen.oueslati@gmail.com Passage vers Spring

Vous aimerez peut-être aussi