View on GitHub

lp4-2019

Premiers pas avec SpringBoot

A la découverte de SpringBoot

Découvrir le framework Spring

Spring est un framework Java open source qui facilite et structure le développement d’applications java. Créé par Rod Jonhson, il est aujourd’hui porté par la société Pivotal.

Initialement dénommé Spring Framework, il est utilisé dans de nombreux projets depuis de nombreuses années.

Au fils du temps, il a évolué pour fournir toujours plus de services et permettre aux développeurs de travailler plus vite, plus facilement et de manière plus structurée.

Spring Framework est composé de modules

spring-architecture

Bien qu’ils soient prévus pour être indépendants, il est fréquent et souvent intéressant d’utiliser au maximum les services qu’ils proposent. Spring est un framework extrement puissant, proposant des services très intéressants mais il un a un gros défaut : il est assez difficile à configurer.

C’est pour palier ce défaut qu’a été créé SpringBoot.

Bien que l’objectif principal soit toujours le même (permettre de développer plus facilement, plus rapidement et de manière structurée des applications java), SpringBoot facilite la mise en place d’un projet qui utilisera les fonctionnalités proposées par Spring en fournissant :

Par ailleurs, SpringBoot est particulièrement efficace dans la création d’API Rest (ou RestFull).

Concepts fondateurs

Spring s’appuie sur 3 concepts :

L’IOC gère les dépendances entre les classes par une simple déclaration.

La POA sépare la couche métier (coeur du logiciel) de la couche technique.

La couche d’abstraction permet d’intégrer facilement d’autres frameworks ou bibliothèques. On utilise pour cela l’outil Maven ou Gradle.

Avant de commencer à utiliser SpringBoot, il faut installer le plug-in pour Eclipse.

SpringBoot est un framework java très pratique et facile à mettre en place. Il prend en charge les dépendances nécessaires au fonctionnement du projet. Une fois le plug-in installé, vous pourrez générer un projet Gradle depuis le site web : https://start.spring.io/

Installation du plugin STS pour eclipse

A installer depuis le Eclipse Marketplace (nous ne l’utiliserons pas dans l’immédiat pour la création de projet SpringBoot) :

STS dans le marketplace

Création d’un projet SpringBoot-Gradle depuis Spring Initializr

Ce projet est une application Standalone (non web)

rendez-vous à l’adresse : https://start.spring.io/ et suivez les instructions.

Initializr01

Initializr02

Importation du projet Gradle dans Eclipse

Initializr03

Ajout d’un package et d’une classe (un simple Bean)

Cette classe MessageBean contient 2 méthodes :

@Component("messageBean")
public class MessageBean {
	public void message()
	{
		System.out.println("Bonjour cher(e) apprenant(e) !");
		
	}
	public void message(String phrase)
	{
		System.out.println("Bonjour cher(e) apprenant(e), voici ta phrase : "+phrase);
	}
}

Modification dans la classe principale et la méthode main()

@SpringBootApplication
@ComponentScan(basePackages = {"fr.bouget.spring.message.springdemo01"})
public class Springdemo01Application {

	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(Springdemo01Application.class, args);
		MessageBean monObjetMessage = (MessageBean) context.getBean("messageBean");
		monObjetMessage.message();
		monObjetMessage.message("C'est facile SpringBoot !");
	}
}

Exécution

Résultat attendu dans votre console

Initializr04

Création d’un projet web SpringBoot-Gradle depuis Spring Initializr

Projet identique avec une dépendance pour le web. Quelques annotations suffisent pour le webiser !

Il faudra juste ajouter une dépendance. Voici un extrait du build.gradle :

implementation 'org.springframework.boot:spring-boot-starter-web'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

Structure du projet

En parcourant notre projet SpringBoot, on observe que les répertoires suivants ont été créés :

En plus de ces répertoires, des fichiers de configurations essentiel au bon fonctionnement de notre projet ont été générés dont celui de Gradle.

Dans ce fichier, on y trouve :

C’est grâce à ce fichier que le projet java sera configuré et que l’ensemble des librairies utiles seront téléchargées et intégrées au projet.

Dans le répertoire src/main/resources Il y a un fichier important nommé application.properties. Ce fichier a vocation à contenir TOUTES les informations de configuration des composants utilisés par le projet (composants encapsulés par SpringBoot).

Toutefois, il est possible de stocker les informations de configuration dans d’autres types de fichiers (YAML, XML) en créant une classe spécifique pour que le framework SpringBoot puisse prendre en charge ce changement.

Pour plus de détails sur les mots clefs utilisables, cliquez ici.

@Component("messageBean")
public class MessageBean {
	public String message()
	{
		return "Bonjour cher(e) apprenant(e) !";
	}
	public String message(String phrase)
	{
		return "Bonjour cher(e) apprenant(e), voici ta phrase : "+phrase;
	}
}
package fr.bouget.spring.message.springdemo02;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springdemo02Application {
	public static void main(String[] args) {
		SpringApplication.run(Springdemo02Application.class, args);
	}
}

L’annotation @SpringBootApplication a 3 fonctions :

Voici la classe MessageController, le point d’entrée.

@Controller
@RequestMapping("/demo2")
public class MessageController {
	
	@Autowired
	private MessageBean messageBean;
	
	@RequestMapping("/message")
	@ResponseBody
	public String afficherMessage()
	{
		return messageBean.message();
	}
	
	@RequestMapping("/message/{phrase}")
	@ResponseBody
	public String afficherMessage(@PathVariable("phrase") String phrase)
	{
		return messageBean.message(phrase);
	}

}

Dans le monde Spring, le mot Controller designe la classe qui fournit les services web (équivalent des Servlet en Java Web). C’est le point d’entrée de l’application web. Pour définir un Controller au sens Spring, on va ajouter à la classe précédemment créée l’annotation @Controller.

Grâce à cette annotation, Spring identifiera cette classe comme une classe spéciale sur laquelle le framework travaillera.

Pour relier la méthode afficherMessage() à une URI, on va ajouter à la déclaration de la méthode l’annotation @RequestMapping(chemin). Chemin étant la chaîne de caractère qui sera ajoutée à la fin de l’URL entrée dans le navigateur.

Comme notre méthode retourne une variable (ici une chaîne de caractères), il faut aussi ajouter l’annotation @ResponseBody qui permet de renvoyer une réponse HTTP.

Lancer votre application web

http://localhost:8080/demo2/message

puis celle ci-dessous :

http://localhost:8080/demo2/message/phil Jarive qui arrive !

Annotations Spring 5.0

Cliquez sur ce lien du blogspot javamidnight

Conclusion

Avec ces projets d’introduction, vous avez pu découvrir que SpringBoot :

Quelques conseils

Spring est un framework difficile à prendre en main car son champ d’application est très vaste. Il fournit une quantité importante de classes utilisables pour différents contextes / besoins et une quantité phénoménale d’annotations auxquelles viennent s’ajouter les annotations des librairies que Spring gère. De plus il est souvent possible d’écrire ces annotations de plusieurs manières.

Vous l’aurez compris, une grande partie du travail à venir sera donc de se familiariser avec tous ces éléments (les annotations particulièrement).

Annotations

Dans la version actuelle de SpringBoot, les annotations ont une importance particulière. Il en existe un grand nombre cependant si vous maîtriser la listes des annotations ci-dessous, vous aurez une base solide pour être autonome. Nous vous conseillons donc d’étudier cette liste est classée par “thématique”.

Configuration

@SpringBootApplication
@Configuration
@ComponentScan
@EnableWebMvc
@Value

Injection de dépendances

@Bean
@Component
@Service
@Repository
@Autowired
@Qualified

Web

@Controller
@RestController
@RequestMapping
@GetMapping
@PutMapping
@PostMapping
@DeleteMapping
@RequestParam
@RequestBody
@ResponseBody
@PathVariable

Culture

10 raisons pour se mettre à SpringBoot :

1ère partie,
2ème partie

Liens spring.io sélectionnés

webographie