SlideShare une entreprise Scribd logo
1  sur  23
Demystification de Spring
Une histoire de Pattern
Hervé Letourneur
12/12/2023
Présentation
1
2
Confidentiel Propriété Meritis
3
Présentation
Hervé Letourneur
Développeur Java depuis 15 ans
Responsable du centre de compétence Java
C’est quoi Spring ?
2
4
Confidentiel Propriété Meritis
C’est un framework qui facilite le développement
5
Réponse en Entretien
C’est
magique
C’est pour faire des applications web
C’est une implémentation Jakarta EE
Confidentiel Propriété Meritis
C’est un conteneur IoC : Inversion of Control
6
Qu’est ce que Spring-core au final ?
Code Applicatif
Librairie
Framework
Confidentiel Propriété Meritis
7
Quel type d’Inversion de contrôle ?
couplage fort
DAO
Service
Controller
Confidentiel Propriété Meritis
8
Quel type d’Inversion de contrôle ?
Dépendance et couplage faible
DAO
Service
Controller
Reutilisabilité
Testabilité
Modifiable
Confidentiel Propriété Meritis
9
Injection de dépendance
DAO
Service
Controller
Nous allons délégué à Spring la création des dépendances
On inverse le contrôle
FACTORY
Confidentiel Propriété Meritis
10
Application context est une Factory
Scan des dépendances à créer
Via @Qualifier (API)
Via @Service, @Component,
@Repository
Controller.class Service.class
Dao.class
Scan de la méthode
d’injection
Via @Inject (API)
Via @Autowired
(Privilégié par constructeur)
Utilisation de la réflexivité
pour créer les dépendances et
les référencer dans le contexte
via son type et son nom
Confidentiel Propriété Meritis
11
Type d’ApplicationContext
Confidentiel Propriété Meritis
Nos dépendances sont créées via Spring, on peut leur donner un Scope qui va définir leur cycle de
vie.
La factory va aussi scanné l’annotation @Scope afin de determiner le cycle de vie choisit.
12
Et si on déléguait plus de chose à Spring ?
Singleton
Une seule instance de la dépendance
sera créée et injecté à chaque demande
de dépendance.
Elle vivra tant que le contexte spring
vivra.
Prototype
Une seule sera créé à chaque demande
de dépendances.
Spring ne garde aucune référence à une
instance crée et ne gére donc pas son
cycle de vie.
WebAware
scope
Des scopes spécifiques au context web
dans les cycles de vies dépendent du
type de scope.
Par exemple le request scope créera
une instance qui ne vivra que le temps
de la requête
Confidentiel Propriété Meritis
Provider<T> ?
(API)
13
Et une autre Factory pour les scopes ?
ObjectFactory<T>
Confidentiel Propriété Meritis
Puisque l’on a un conteneur d’inversion de contrôle, pourquoi ne pas lui donner des taches
techniques et répétitives pour que l’on se concentre sur le métier ?
Ex : @Transactional
14
Encore plus de délégation à Spring ?
Spring begin Trans Spring end Trans
Code Applicatif
Code applicatif Code applicatif
Lib ou Api
Transaction
Comment Spring fait ?
Confidentiel Propriété Meritis
Proxy du Service
UN
PROXY
15
Spring au petit oignon !!
ApplicationContext
getBean(Service.class)
Service
Confidentiel Propriété Meritis
16
Voici ce que Spring nous crée !
DAO
Service
Controller
Confidentiel Propriété Meritis
Spring-core est un conteneur IoC :
Il va créer nos dépendances grâce à l’injection de dépendance.
Il va gérer leur cycle de vie.
Ces dépendances vont être proxyfié afin de faciliter l’ajout de fonctionnalité technique
17
Spring-core
Application à d’autres modules
3
18
Confidentiel Propriété Meritis
19
Spring Web
DispatcherServlet
Controller
Controller
http request
@RestController
@RequestMapping("/controller1")
@RestController
@RequestMapping("/controller2")
Request sur
/controller1
Request sur
/controller2
Service1 Etc …
Confidentiel Propriété Meritis
JdbcTemplate => Template de Méthode
20
Spring Jdbc
Template démarre la
session JDBC
Preparation du prepare
statement et execution
Code applicatif fournit la requête
et paramêtre
Récupération
ResultSet
Fin de la sessionretourne le
résultat du mapping
Code applicatif fournit le
rowmapper
Confidentiel Propriété Meritis
21
Spring Security
DispatcherServlet
Sécurité Chain => Chaine de resposabilité
CorsFilter
ExceptionTrans
altionfilter
JwtFilter AuthenticationFilter
Confidentiel Propriété Meritis
Spring Boot avec le principe d’auto-configuration pousse au maximum tout ce que le framework
prend en charge.
Dans le cas d’une application Web qui utilisera une base de donnée, il suffira de mettre les propriétés
(host, login, mdp) de la base de donnée, les controllers et les services métier.
Spring s’occupera de créer la DataSource à notre place, l’injecter dans nos Repository JPA qui eux
même recevront une implémentation fournit par Spring, il construira les dépendances juqu’aux
RestController qui seront référencer dans la DispatcherServlet qui elle-même sera déclaré dans un
conteneur de Servlet qui sera démarrer.
22
Sprint Boot
23

Contenu connexe

Similaire à Demystification de Spring Une histoire de Pattern.pptx

Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsNicolas Herbaut
 
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"OCTO Technology
 
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexes
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexesSayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexes
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexesSayehHiba1
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeMicrosoft
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses" La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses" OCTO Technology
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1ATHMAN HAJ-HAMOU
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdfbadrfathallah2
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Entity Framework 7 : nouvelle version majeure d’Entity Framework
Entity Framework 7 : nouvelle version majeure d’Entity FrameworkEntity Framework 7 : nouvelle version majeure d’Entity Framework
Entity Framework 7 : nouvelle version majeure d’Entity FrameworkMicrosoft
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...Publicis Sapient Engineering
 
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...Publicis Sapient Engineering
 

Similaire à Demystification de Spring Une histoire de Pattern.pptx (20)

Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
 
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexes
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexesSayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexes
Sayeh hiba-karaa-eya-ferjani-maroua-hamzaoui-balkiss-sys-complexes
 
vNext
vNextvNext
vNext
 
Spring
SpringSpring
Spring
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicative
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses" La Duck Conf - "L'API Management : au-délà des promesses"
La Duck Conf - "L'API Management : au-délà des promesses"
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Entity Framework 7 : nouvelle version majeure d’Entity Framework
Entity Framework 7 : nouvelle version majeure d’Entity FrameworkEntity Framework 7 : nouvelle version majeure d’Entity Framework
Entity Framework 7 : nouvelle version majeure d’Entity Framework
 
1 Introduction
1 Introduction1 Introduction
1 Introduction
 
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et produ...
 
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
Paris Container Day 2016 : Choisissez votre style avec docker & Amazon Web Se...
 

Demystification de Spring Une histoire de Pattern.pptx

  • 1. Demystification de Spring Une histoire de Pattern Hervé Letourneur 12/12/2023
  • 3. Confidentiel Propriété Meritis 3 Présentation Hervé Letourneur Développeur Java depuis 15 ans Responsable du centre de compétence Java
  • 5. Confidentiel Propriété Meritis C’est un framework qui facilite le développement 5 Réponse en Entretien C’est magique C’est pour faire des applications web C’est une implémentation Jakarta EE
  • 6. Confidentiel Propriété Meritis C’est un conteneur IoC : Inversion of Control 6 Qu’est ce que Spring-core au final ? Code Applicatif Librairie Framework
  • 7. Confidentiel Propriété Meritis 7 Quel type d’Inversion de contrôle ? couplage fort DAO Service Controller
  • 8. Confidentiel Propriété Meritis 8 Quel type d’Inversion de contrôle ? Dépendance et couplage faible DAO Service Controller Reutilisabilité Testabilité Modifiable
  • 9. Confidentiel Propriété Meritis 9 Injection de dépendance DAO Service Controller Nous allons délégué à Spring la création des dépendances On inverse le contrôle FACTORY
  • 10. Confidentiel Propriété Meritis 10 Application context est une Factory Scan des dépendances à créer Via @Qualifier (API) Via @Service, @Component, @Repository Controller.class Service.class Dao.class Scan de la méthode d’injection Via @Inject (API) Via @Autowired (Privilégié par constructeur) Utilisation de la réflexivité pour créer les dépendances et les référencer dans le contexte via son type et son nom
  • 12. Confidentiel Propriété Meritis Nos dépendances sont créées via Spring, on peut leur donner un Scope qui va définir leur cycle de vie. La factory va aussi scanné l’annotation @Scope afin de determiner le cycle de vie choisit. 12 Et si on déléguait plus de chose à Spring ? Singleton Une seule instance de la dépendance sera créée et injecté à chaque demande de dépendance. Elle vivra tant que le contexte spring vivra. Prototype Une seule sera créé à chaque demande de dépendances. Spring ne garde aucune référence à une instance crée et ne gére donc pas son cycle de vie. WebAware scope Des scopes spécifiques au context web dans les cycles de vies dépendent du type de scope. Par exemple le request scope créera une instance qui ne vivra que le temps de la requête
  • 13. Confidentiel Propriété Meritis Provider<T> ? (API) 13 Et une autre Factory pour les scopes ? ObjectFactory<T>
  • 14. Confidentiel Propriété Meritis Puisque l’on a un conteneur d’inversion de contrôle, pourquoi ne pas lui donner des taches techniques et répétitives pour que l’on se concentre sur le métier ? Ex : @Transactional 14 Encore plus de délégation à Spring ? Spring begin Trans Spring end Trans Code Applicatif Code applicatif Code applicatif Lib ou Api Transaction Comment Spring fait ?
  • 15. Confidentiel Propriété Meritis Proxy du Service UN PROXY 15 Spring au petit oignon !! ApplicationContext getBean(Service.class) Service
  • 16. Confidentiel Propriété Meritis 16 Voici ce que Spring nous crée ! DAO Service Controller
  • 17. Confidentiel Propriété Meritis Spring-core est un conteneur IoC : Il va créer nos dépendances grâce à l’injection de dépendance. Il va gérer leur cycle de vie. Ces dépendances vont être proxyfié afin de faciliter l’ajout de fonctionnalité technique 17 Spring-core
  • 19. Confidentiel Propriété Meritis 19 Spring Web DispatcherServlet Controller Controller http request @RestController @RequestMapping("/controller1") @RestController @RequestMapping("/controller2") Request sur /controller1 Request sur /controller2 Service1 Etc …
  • 20. Confidentiel Propriété Meritis JdbcTemplate => Template de Méthode 20 Spring Jdbc Template démarre la session JDBC Preparation du prepare statement et execution Code applicatif fournit la requête et paramêtre Récupération ResultSet Fin de la sessionretourne le résultat du mapping Code applicatif fournit le rowmapper
  • 21. Confidentiel Propriété Meritis 21 Spring Security DispatcherServlet Sécurité Chain => Chaine de resposabilité CorsFilter ExceptionTrans altionfilter JwtFilter AuthenticationFilter
  • 22. Confidentiel Propriété Meritis Spring Boot avec le principe d’auto-configuration pousse au maximum tout ce que le framework prend en charge. Dans le cas d’une application Web qui utilisera une base de donnée, il suffira de mettre les propriétés (host, login, mdp) de la base de donnée, les controllers et les services métier. Spring s’occupera de créer la DataSource à notre place, l’injecter dans nos Repository JPA qui eux même recevront une implémentation fournit par Spring, il construira les dépendances juqu’aux RestController qui seront référencer dans la DispatcherServlet qui elle-même sera déclaré dans un conteneur de Servlet qui sera démarrer. 22 Sprint Boot
  • 23. 23