Aller au contenu

Module 01 — Spring Boot & IoC (Bases)

Objectif : comprendre ce que Spring fait pour vous et pourquoi on structure une application en couches. Petite introduction sur quelques concepts importants.


1) Intérêt d’utiliser un Framework comme Spring/SpringBoot

Sans framework, vous écrivez ceci :

public class PublicQueryController {
  private final ChienRepository chienRepository = new ChienRepositoryImpl(); // (exemple basique)
}

Problèmes

Avec Spring : on déclare des dépendances et Spring les fournit.


2) IoC / DI


3) Le conteneur Spring (au démarrage)

Quand l’application démarre, Spring :

  1. Scanne le classpath (vos packages, c’est la raison pour laquelle ils doivent être structurés)
  2. Détecte les classes annotées (@RestController, @Service, @Repository, @Component)
  3. Instancie ces classes (des beans)
  4. Résout les dépendances (constructeurs)
  5. Garde tout en mémoire et réutilise les instances (objets)

4) Rôles des classes (architecture MVC + service)

Couche Rôle Vous devez vous demander…
Controller (@RestController) HTTP/JSON comment répondre au client ?
Service (@Service) Métier quelles règles ? quel enchaînement ?
Repository (@Repository / Spring Data) Données comment accéder à la BD ?

Règle d’or :


5) Pourquoi l’injection par constructeur (et pas par @Autowired)

Recommandé

@RestController
class MonController {
  private final MonService service;
  XController(MonService service)
  {
	this.service = service;
  }
}

Pratique mais moins clean code

@RestController
class MonController {
  @Autowired private MonService service;
}

Pourquoi on préfère utiliser le constructeur ?


6) Point de départ Spring Boot : @SpringBootApplication

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

Cette annotation regroupe :


7) Auto-configuration : Convention over configuration

Spring Boot détecte les dépendances :

Vous configurez le minimum utile, le reste est automatique.


8) Intérêt d’utiliser UML pour développer

UML : les composants

UML sert à :


9) Question

  1. Expliquez IoC avec vos mots.
  2. Donnez 2 raisons d’utiliser l’injection par constructeur.
  3. Dans Wouaf Wouaf, repérez un endroit où un controller renvoie une @Entity (indice : PublicQueryController) et expliquez pourquoi c’est risqué !