Spring (WIP)
Spring (WIP)
Spring (WIP)
Spring
• Introduction
• Concepts clés
• Spring Container
• Inversion of Control (IoC)
• Dependency Injection (DI)
• Architecture d’un projet
• Beans et composants Spring
Spring
• Services et entités
• Adapté à de nombreux types de projets, mais est surtout très utilisé pour des
applications d’entreprise (API ou MVC).
• Spring Container
• Il lie les classes Java avec les metadata qui lui sont fournies (en XML ou
grâce à des annotations) et gère la création, la vie et la destruction des
objets.
• C’est lui également qui lie les classes entre elles lorsque c’est nécessaire.
Concepts clés
Spring Container
• Il existe deux types de container qui peuvent être utilisés, et qui sont basés
sur deux interfaces distinctes :
• org.springframework.beans.factory.BeanFactory
• org.springframework.context.ApplicationContext
• Composants :
Par annotation, dans une classe annotée @Component
• Les composants sont simplement des objets gérés par Spring. On peut ainsi
créer des classes utilitaires qui pourront être injectées par le conteneur.
Concepts clés
Beans et composants Spring
• REST Controllers :
Par annotation, dans une classe annotée @RestController pour travailler en JSON
• Ils fonctionnent comme les composants, à part qu’on peut utiliser les annotations de
Mapping afin de répondre à des requêtes HTTP.
• @PostMapping("/resources") Pour créer une ressource
• @GetMapping("/resources") Pour récupérer des ressources
• @GetMapping("/resources/{id}") Pour récupérer une ressource
• @PutMapping("/resources/{id}") Pour modifier une ressource
• @DeleteMapping("/resources/{id}") Pour supprimer une ressource
Concepts clés
Beans et composants Spring
• Services :
Par annotation, dans une classe annotée @Service
• Configuration :
Par annotation, dans une classe annotée @Configuration
• Les requêtes peuvent être faites en POST, GET, PUT et DELETE, ce qui permet de définir
le type de traitement qui doit être fait (ajout, lecture, modification et suppression).
• Les classes annotées @Service fonctionnent comme les composants classiques et sont
gérés par le conteneur Spring. Aucune différence fonctionnelle n’existe, l’annotation
permet simplement de spécifier que ce composant fait partie de la couche « Service ».
• Les services suivent toutefois une convention particulière : on déclare toujours une
interface, et au moins une implémentation. Pour l’injection de dépendances, c’est
l’interface qui est utilisée. Cela permet au développeur de changer d’implémentation
sans devoir modifier de code ailleurs dans l’application.
Services et entités
• Pour faciliter la conversion des DTOs en Entités, des « Mappers » sont créés. Ce
sont des classes utilitaires qui gèrent la conversion d’un type vers l’autre. Des
outils tels que MapStruct permettent de faciliter leur développement.
Repositories, entités et JPA
• Les entités vont être configurées par des annotations afin de définir comment la
base de données sera construite, et les repositories définiront les possibilités
d’interactions avec cette base de données.
• Grâce à Spring Data JPA, on peut simplement déclarer une interface héritant de
JpaRepository qui fournira des méthodes de base de communication avec la BD.
Pour des cas plus complexes, les méthodes personnalisées ou l’annotation
@Query peuvent être utiles.
Repositories, entités et JPA
• @Entity : définit une entité JPA, et donc une table en base de données
• @Table : permet de personnaliser la table (nom, index,…)
• @Column
• name = "…« : permet de définir le nom de la colonne en base de données
• nullable = false : permet de définir une contrainte de non-nullité