Introduction à Spring Boot et IoC
Introduction à Spring Boot et IoC
Pr. Y. EL GHAYAM
Plan
●
Introduction
●
Définition
●
Spring IoC
✔
IoC
✔
IoC avec Spring
Spring MVC
Spring Data
Spring Boot
Introduction
• Produit Informatique
Une solution répondant à un besoin particulier dans un future proche. Exprimé
dans un cahier des charges.
✔ Contraint par une durée de réalisation.
✔ Respecte une démarche de réalisation (cycle en V, méthode agile) et soumis
à une planification : étape – période.
✔ Critiqué selon plusieurs contraintes de qualité.
✔ Besoin d’amélioration
✔ Limité par un budget.
✔ Application Web : cas typique d’un produit informatique.
Introduction
• Exigences d’un produit Informatique
✔ Exigences Fonctionnelles
➢ Satisfaire les besoins fonctionnels (métier) de l’entreprise : exprimés par les cas
d’utilisation dans un diagramme de use cases,
✔ Exigences Techniques
➢ Performances
Temps de réponse
Problème de montée en charge : une architecture distribuée scalable
Tolérances aux panes
➢ Sécurité : L’application doit prévoir des solutions pour toutes les failles de sécurités
➢ Persistances des données dans des SGBD appropriés : Gestion des Transactions
➢ Exigences financières : Le coût du logiciel doit respecter les contraintes budgétaires
Définition
Spring est un framework open source à base de Java qui fournit une infrastructure transparente et
compréhensive pour développer des applications d’entreprise.
✔ Entreprise : assurer les différentes taches des différents intervenants d’une entreprise tout en couvrant les
différents aspects d’une application : sécurité, portabilité, scalabilité, accessibilité, manageabilité, …
✔ Le développeur se concentre plus sur la logique métier de l’application plutôt que sur la configuration de
l’application.
✔ Toutes les configurations, à base de fichier XML ou à base de Java sont manipulées par le framework de
Spring.
● Considéré comme une technologie alternative d’EJB (Entreprise Java Bean). Spring est plus simple et plus
léger.
✔ EJB définit des objets -beans- dépendant du framework : un framework lourd.
✔ N’hérite d’aucune classe et n’implémente aucune interface du framework et n’a pas besoin de créer aucune
méthode callback.
✔ Facile à utiliser entre les couches et à transférer à travers le réseau.
✔ Facile à tester.
✔ Résolution de dépendance,
✔ Configuration de l’application.
✔ Sécurité,
✔ Lier entre les objets d’une application et gérer leurs cycles de vie.
✔ Les composants dépendants ne sont pas créés par l’opérateur new. Les composants sont injectés par le
Regroupés selon :
Web : fournir un support pour la création des
applications web. se base sur d’autres modules (AOP,
Core, Context, ..)
Data Access : essentiellement assure la communication
avec la base des données.
AOP : permet une programmation orientée aspect.
Facilite largement l’intégration des fonctionalités tel
que la gestion d’accès dans un projet Spring.
Spring Core : assure l’inversion de controle (IoC) et la
l’injection des dépendances (DI).
Test : permet les tests unitaires avec Junit.
Inversion de controle (IoC)
Couplage fort et couplage faible
Couplage fort : Une classe A est liée à une classe B : la classe
A est fortement couplée à la classe B.
La classe A ne peut fonctionner qu’en présence de la classe B.
✔ S’il y a une nouvelle version de la classe B
==> obligé de modifier la classe A.
class A{
private B b;
...
public A(B b) { this.b = b;} class B{
public double calcul() { ...
return [Link](); public double getValue() { ...}
} }
}
A a = new A(ib);
}
}
Inversion de controle (IoC)
Définition
<property name="beanOne">
<ref bean="anotherBean"/>
</property>
<pro an"/>
<property name="integerProperty" value="1"/>
</bean>
Beans internes
public class OuterClass {
Le bean interne représente une classe qui définit ses private InnerClass innerClass;
propres dépendances. public void setInnerClass(InnerClass inner) {
✔ N’a pas besoin de ID. [Link] = inner;
}
✔ Créé comme un objet anonyme.
}
✔ Sa portée dépend de la portée du bean principal.
<bean id="outer" class="OuterClass"> public class InnerClass {
<property name="innerClass"> private String name;
<bean class="InnerClaas"> <!-- inner bean --> private int age;
<property name="name" value="Fiona Apple"/>
<property name="age" value="25"/> public void setName(String name) {
</bean> [Link] = name;
</property> }
</bean>
public void setIntegerProperty(int age) {
[Link] = age;
}
}
Inversion de controle (IoC)
Fichier XML : DI par les setters
depends-on
Exprimé pour forcer l’initialisation d’un ou plusieurs
beans.
✔ Demander au conteneur de charger les beans
indiqués dans depends-on.
✔ Utile pour définir le moment d’initialisation des
objets.
<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">
<property name="manager" ref="manager" />
</bean>
@Value("10")
private int defaultInt;
@Value("Test")
public void printValues(String s, String v){ }
//both 's' and 'v' values will be 'Test'
}
Inversion de controle (IoC)
Configuration à base de XML :
@Configuration
public class AppConfig {
@Bean est une annotation au niveau d’une méthode. @Bean
@Description(“une description”)
✔ Equivalente à la balise <bean/>. public TransferService transferService() {
✔ Indique que la méthode instancie, configure et return new TransferServiceImpl();
}
initialise un nouvel objet pour être géré par le }
conteneur Spring IoC.
Par défaut, le nom du bean est le même @Configuration
public class AppConfig {
que le nom de la méthode. @Bean
public TransferService transferSrv(AccountRepo accountRepo)
@Bean({“nom1”, ..}) pour définir {
des alias. return new TransferSrvcImpl(accountRepo);
}
@Bean("myThing")
public Thing thing() {
return new Thing();
}
}
public class BeanOne {
public void init() {
Inversion de controle (IoC) // initialization logic
}
}
Configuration à base de Java public class BeanTwo {
public void cleanup() {
@Bean }
// destruction logic
}
@Configuration
public class AppConfig {
Peut utiliser les méthodes callbacks de cycle de vie telles
que initMethod et destroyMethod. @Bean(initMethod = "init")
public BeanOne beanOne() {
return new BeanOne();
@Scope(…) pour indiquer la portée : }
@Bean(destroyMethod = "cleanup")
✔ Singleton, par défaut, public BeanTwo beanTwo() {
return new BeanTwo();
✔ @Scope(“prototype”) }
}
Supporte la dépendance : une méthode appelle une
deuxième méthode.
@Configuration
public class AppConfig {
@Bean
public ClientService clientService() {
Return new ClientServiceImpl(clientDao());
}
@Bean
public ClientDao clientDao() {
return new ClientDaoImpl();
}
}
TP 3
●
Développer une application de gestion de
commandes selon le diagramme de classe
indiqué.
●
On se base sur Spring pour la définition
des beans et sur l’IoC de Spring pour la
création des objets.
●
Dans la mathode main:
– On prépare un stock de 4 produits.
– On définit un client.
– Le client effectue une commande sur
un produit.