Vous êtes sur la page 1sur 26

FRAMEWORK SPRING BOOT

DÉVELOPPEMENT D’APPLICATIONS
AVEC LE MODEL MVC
Introduction : Spring et Spring Boot (comparaison)
PLAN DU
1.

2. Développement d’une application Spring Boot


COURS 3. Communication entre deux applications via API REST
FRAMEWORK SPRING
▪ https://spring.io/projects

▪ Spring Core : Ce composant est la base de l’écosystème Spring.

▪ Contient le “core container” (ce qui permet l’injection de dépendances)

▪ Contient également Spring MVC qui permet de faire du web et de Data Access qui fournit des éléments fondamentaux pour la communication avec les bases de
données.

▪ Spring Data

▪ Permet de communiquer avec de nombreux types de bases de données

▪ Spring Security

▪ L’un des plus critiques de Spring Framework, bien qu’il soit aussi l’un des plus complexes. Il permet de gérer l’authentification, l’autorisation, et la sécurité des API.

▪ Spring Cloud

▪ Spring Framework fournit Spring Cloud pour la gestion des microservices

▪ Spring Boot

▪ Composant très particulier de Spring Framework, il permet de mettre en œuvre tous les autres.

▪ C’est un composant au service des autres composants.

▪ Ses avantages qui sont :

▪ l'autoconfiguration automatique de Spring ;

▪ des starters de dépendances ;

▪ des endpoints Actuator pour fournir des données sur l’application.


SPRING BOOT
▪ Les avantages de Spring Boot

1. Optimisation de la gestion des dépendances:

▪ Spring Boot fournit des starters, qui correspondent à un ensemble de dépendances homogénéisées (associations, versions). On peut
les comparer à des kits de dépendances.

▪ Nul besoin de définir les versions des dépendances explicitement dans le pom.xml : Maven les déduit grâce à la version de Spring Boot
utilisée

▪ Tous les starters sont préfixés par “spring-boot-starter”. Voici quelques exemples de starters :

▪ spring-boot-starter-core ;

▪ spring-boot-starter-data-jpa ;

▪ spring-boot-starter-security ;

▪ spring-boot-starter-test ;

▪ spring-boot-starter-web.
Les Starters
▪ https://start.spring.io/
SPRING BOOT

2. Autoconfiguration

▪ L’avantage le plus important de Spring Boot. Avec Spring Boot, il y a beaucoup moins de configuration (concernant la gestion

des servlets, le chargement du contexte Spring, la connexion à la base de données).

▪ L’utilisation de Spring Boot, et l’annotation @SpringBootApplication placée au niveau de la classe principale (celle générée

automatiquement), déclenchent automatiquement de nombreuses opérations en background qui nous sont nécessaires.

3. Monitoring : Spring Boot Actuator correspond à une fonctionnalité de Spring Boot qui permet de monitorer et de manager

dynamiquement le programme ( API …)

4. Le déploiement : Un projet Spring Boot contient un tomcat embarqué au sein même du JAR généré. Le projet web peut donc

être déployé au sein de ce tomcat embarqué.


SPRING BOOT
▪ Exemple de différences entre deux Projets, en mettant en avant les avantages de Spring Boot.

Répertoires Projet « Webwithoutsb » Projet « Webwithoutsb »


Sans Spring Boot Avec Spring Boot

src/main/java JpaConfig.java : créer manuellement WebwithsbApplication.java : c’est une classe créée


automatiquement par Spring Boot

src/main/resources •contextFront.xml : configuration manuelle du •Pas besoin de contextFront : Spring Boot s’en occupe
scanning et du viewresolver •application.properties : contient la configuration de la BDD.
•META-INFO/persistence.xml : contient la Et plus simple à aborder que XML.
configuration de la BDD •template/home.html : rendu HTML à fournir.

src/main/webapp 2 fichiers : Ce dossier n’existe pas ! Spring Boot n’a pas besoin de tout
•template/home.jsp : rendu HTML à fournir ça
•web.xml : fournit de la configuration pour la
gestion des servlets

fichiers pom.xml 8 dépendances + 2 dépendances dans le 5 dépendances sans avoir défini les versions
dependencyManagement pour les versions
SPRING BOOT
▪ L’annotation @SpringBootApplication :

▪ L’IoC container va instancier pour vous des classes, puis si nécessaire les injecter dans d’autres instances de classe.

▪ Pour qu’une classe soit manipulée par l’IoC container, il est nécessaire de l’indiquer explicitement à Spring.

▪ Via des fichiers XML ou bien via Annotation au sein desquels on décrit les classes que Spring doit gérer :

▪ l’annotation @SpringBootApplication va permettre à l’IoC container de manipuler la classe concernée

▪ @SpringBootApplication est composé de 3 autres annotations :

▪ @SpringBootConfiguration : la classe sera utilisée comme une classe de configuration.

▪ @EnableAutoConfiguration : active la fonctionnalité d’autoconfiguration de Spring Boot.

▪ @ComponentScan : active le “scanning” de classes dans le package de la classe et dans ses sous-packages. Sans cette annotation, l’IoC container ne
tiendra pas compte des sous classes.
SPRING BOOT

▪ Structure d’un projet Spring Boot:


SPRING BOOT

 Spring Boot fournit une interface nommée “CommandLineRunner”. En implémentant cette interface, la classe sera obligée
de déclarer la méthode “public void run(String... args) throws Exception“.

 Si la classe est un bean (chargée dans le contexte Spring), Spring Boot exécutera la méthode run au démarrage.

 Deux choix :

• soit modifier la classe HelloWorldSpringBApplication afin qu’elle implémente CommandLineRunner et la méthode run, avec
comme corps de méthode un “System.out.prinln(“Hello World!”)” ;

• soit créer une nouvelle classe qui implémente CommandLineRunner, la méthode run , et qui a une annotation @Component (au-dessus
du nom de la classe).

 En résumé

• Au sein d’une application Spring Boot, écrire du code implique de définir les beans utilisés par Spring.

• On peut exécuter du code grâce à l’implémentation de l’interface CommandLineRunner et de la méthode run.

• Pour qu’une classe soit déclarée en tant que bean, on l’annote @Component.

• Pour qu’un bean soit injecté dans un attribut, on annote l’attribut @Autowired.
SPRING BOOT
 Exemple d’une application Spring Boot :
SPRING BOOT : TEST

 @SpringBootTest est une annotation fournie par Spring Boot.

 Elle permet lors de l’exécution des tests d’initialiser le contexte Spring. Les beans de l’application peuvent alors être utilisés.

 Pour rappel : un test s’exécute de façon unitaire et autonome.

 Par défaut, le test n’a donc aucune connaissance du contexte Spring. Dans le cas d’une application Spring Boot, c’est un vrai problème !

 Le problème est résolu grâce à l’annotation @SpringBootTest.

 La méthode contextLoads est annotée @Test (annotation qui provient de JUnit ), et n’a pas de contenu.
SPRING BOOT : TEST
SPRING BOOT : API

 Une entreprise myHR souhaite offrir un service de gestion d’employés aux petites entreprises.

 L’idée est d’offrir une suite d’outils (application web, application mobile) prête à l’emploi.

 Pour lancer ce projet, myHR souhaite avant tout mettre à disposition une API qui permettra à toutes les autres applications d’accéder aux

mêmes données.

 L’idée étant de gérer des employés, l’API devra donc offrir un CRUD pour les données des employés.

 Les données seront dans une base de données H2 : H2 est une base de données relationnelle Java très légère, qui par défaut fonctionne en “in

memory”. Au démarrage du programme, la structure de la base est construite ; et lorsque le programme s’arrête, le contenu de la base de

données est supprimé.

 L’ API Rest devra donc exposer des Endpoints correspondant aux actions du CRUD, et communiquer avec la base de données pour récupérer ou

modifier les informations des employés.


SPRING BOOT : API

 L’architecture se présente comme suit :

Couche Objectif
controller Réceptionner la requête et fournir la réponse
service Exécuter les traitements métiers
repository Communiquer avec la source de données
model Contenir les objets métiers
SPRING BOOT : API
 Exemple pour le REST contrôleur, la liste de méthodes est adaptée à un CRUD

 Exemple de Endpoint dans le cas du CREATE : Il est important d’utiliser l’annotation @RestController au niveau de la classe. Cela
automatise le retour au format JSON.
Annotation Type HTTP Objectif
@GetMapping GET Pour la lecture de données.
@PostMapping POST Pour l’envoi de données. Cela sera utilisé par
exemple pour créer un nouvel élément.

@PatchMapping PATCH Pour la mise à jour partielle de l’élément envoyé.

@PutMapping PUT Pour le remplacement complet de l’élément


envoyé.
@DeleteMapping DELETE Pour la suppression de l’élément envoyé.
@RequestMapping Intègre tous les types HTTP. Le type souhaité est
indiqué comme attribut de l’annotation. Exemple :
@RequestMapping(method = RequestMethod.GET)
SPRING BOOT : API

 Configuration : api_sb → application.properties


SPRING BOOT : WEBAPP (GESTION EMPLOYÉS) ET API
 Thymeleaf est l’un des moteurs de template (template engine) les plus couramment utilisés.
 Un moteur de template HTML va nous aider à formater la page HTML que nous voulons renvoyer.
 En résumé : Pour implémenter une application web qui communique avec une API, 2 éléments sont essentiels :
 Le starter Spring Web qui permettra de renvoyer des pages HTML et communiquer avec l’API.
 Un moteur de template comme Thymeleaf qui permet de formater le HTML.

 On peut créer des propriétés et les manipuler dans le code, notamment grâce à l’annotation @ConfigurationProperties
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API

Application : webapp Application : api_sb


Application.ressources 9000
9001

urlApi 9000

H2
SPRING BOOT : API

 http://localhost:9000/h2-console
 src/main/resources/ → schema.sql
SPRING BOOT : WEBAPP (GESTION EMPLOYÉS) ET API
 Création de la WebApp pour la partie Affichage (webapp) :
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API
 L’objectif est de faire communiquer l’application web avec l’API REST

 Le starter Spring Web fournit le code nécessaire RestTemplate.

 RestTemplate reste une façon valide de communiquer avec une API


en synchrone,

 RestTemplate permet d’exécuter une requête HTTP: On a besoin de


fournir l’URL, le type de requête (GET, POST, etc.), et le type d’objet
qui sera retourné.

 RestTemplate grâce à la methode exchange convertit le résultat


JSON en objet Java

 le type retour, peut être un objet ParameterizedTypeReference car


/employees renvoie un objet Iterable<Employee>.

 Sil’endpoint renvoie un objet simple, alors il suffira d’indiquer


<Object>.class.

• On récupère notre objet Iterable<Employee> grâce à la méthode


getBody() de l’objet Response.
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API

 Exemple : L’objectif est de créer un nouvel Employee


 On réutilise RestTemplate et on fournit toujours l’URL, la méthode HTTP (cette fois POST) et le type retour (en l’occurrence Employee.class).
 La différence correspond au nouvel objet HttpEntity qui, a été instancié avec en paramètre du constructeur l’objet Employee (nommé e).
 On transmet ensuite cet objet HttpEntity comme 3e paramètre de la méthode exchange (ce paramètre était null précédemment).
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API

 L’objectif est de créer un Service


 Le Service est identifié comme étant un bean.
 L’annotation utilisée sera @Service, qui est une spécialisation de l’annotation
@Component
 l’objet EmployeeProxy est injecté, ainsi cette classe pourra faire appel à la source
de données à travers le proxy
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API
 L’objectif est de fournir les données à la vue
 L’objet Model (org.springframework.ui.Model) a été ajouté en paramètre
de la méthode home(). Spring se charge de fournir une instance de cet
objet.
 Dans le corps de la méthode, on utilise la méthode addAttribute qui
permet d’ajouter au Model un objet.
 Ajouter des attributs au Model permet d’y accéder dans la vue HTML.
Grâce à Thymeleaf.

 Les instructions th:if et th:each permettent respectivement d’implémenter


une condition et une itération
 Thymeleaf fournit la capacité d’écrire un code HTML dynamique.
 La syntaxe ${nom de l’attribut} permet d’accéder à un objet placé comme
attribut dans le Model.
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API
 Situation(1) : la donnée est transmise par UR (de suppression d’un employé par exemple)
 La méthode deleteEmployee possède un paramètre nommé id de type int ;
 Le point clé est l’annotation @PathVariable qui signifie que ce paramètre est présent dans l’URL de
requête http://localhost:9001/deleteEmployee/1

 Coté IHM Thymeleaf : On utilise l’attribut th:href de Thymeleaf, et la syntaxe @{} permet de définir une URL.
 Le chemin /deleteEmployee/ est complété par l’id à fournir grâce à la syntaxe : {id}(id==${employee.id}).
SPRING BOOT : WEBAPP (GESTION EMPLOYES) ET API
 Situation(2) : la donnée est transmise par un formulaire
 La méthode saveEmployee est annotée @PostMapping et non @GetMapping. il s’agit de traiter la validation d’un formulaire,
 L’autre point clé est le paramètre de la méthode “@ModelAttribute Employee employee”.
 @ModelAttribute est l’annotation « magique ».
 Cette annotation permet à Spring de récupérer les données saisies dans les champs du formulaire et de construire un objet
Employee correspondant.

 th: object=${employee} fait le lien avec le ModelAttribute.


 th:field donne la correspondance avec les attributs de l’objet associé. Vous pouvez noter la syntaxe particulière : “*{firstName}”.

Vous aimerez peut-être aussi