Injection de
dépendance
s
avec Spring
Auteur : Walid YAICH Dernière mise à jour : 06 Sep 2017
1
Objectifs
▰ Installer l’environnement de développement.
▰ Comprendre l'intérêt du logging et comment le
mettre en place.
▰ Construire un projet Spring en utilisant Maven
▰ Configurer l’injection de dépendances par XML.
▰ Configurer l’injection de dépendances par Java.
▰ Configurer l’injection de dépendances par
annotations. walid.yaich@espr
it.tn
2
Plan
▰ Eclipse / Spring tool Suite ▰ Lancer des commandes
▰ SonarLint Maven depuis
▰ Diagramme de classe Eclipse/STS
▰ Structure du projet ▰ Exercice
▰ Maven - pom.xml ▰ Configuration par Java
▰ Logging ▰ Configuration par
▰ Configuration par XML annotation
▰ Exécution d’une ▰ Quote
application Spring en ▰ Stereotype Annotations
utilisant Maven ▰ Bean Scope
walid.yaich@espr
3
it.tn
Eclipse / Spring tool Suite
Spring Tool Suite™
est un eclipse
personnalisé pour le
développement
d’application Spring
Fonctionnalités :
https://spring.io/tools/sts
walid.yaich@espr
4
it.tn
SonarLint
SonarLint est un plugin
Eclipse qui permet à
chaud de :
1) Détecter les
mauvaises
pratiques de
Comment installer le plugin codage.
2) Proposer des
solutions.
http://www.sonarlint.org/
walid.yaich@espri 5
Sources and JavaDoc
Pour visualiser les sources
et JavaDoc des différents
jars utilisés :
Window -> preferences
walid.yaich@espri 6
Télécharger un projet Maven
de git
7
Diagramme de classe
walid.yaich@espr
8
it.tn
Structure du
projet
walid.yaich@espr
9
it.tn
Maven - pom.xml
Identifiant unique
Livrable :
C’est la définition du projet, ces
informations vont apparaître dans
le site généré par la commande :
mvn site
walid.yaich@espr
it.tn 10
Maven - pom.xml -
dépendances
Les dépendances Spring
Les dépendances de Logback
walid.yaich@espr
11
it.tn
Maven - pom.xml - Plugins
Ce plugin nous permet d’exécuter
un programme java avec la
commande Maven :
Ce plugin nous permet de générer un jar
mvn exec:java exécutable avec la commande :
mvn package
walid.yaich@espr
it.tn
12
Logging
Le logging est une activité technique utile et nécessaire dans une application pour :
● Obtenir des traces d'exécution (démarrage/arrêt, informations, avertissements, erreurs d'exécution, …)
● Faciliter la recherche d'une source d'anomalie (stacktrace, ...)
● Comprendre et/ou vérifier le flux des traitements exécutés.
● ...
Il est fortement recommandé d'utiliser une API de logging plutôt que
d'utiliser la méthode System.out.println() pour plusieurs raisons :
● Activer/déactiver les logs a tout moment.
● Changer le niveau de logs Debug, INFO, ERROR …
● Configurer la rotation et le purge.
● Avoir des informations détaillées tel que la date.
● Améliorer la performance de l’application ( Asynchronous Loggers).
walid.yaich@espr
13
it.tn
Utilisation de Logback
Logback est une bibliothèque de logging qui permet de tracer l'exécution du code en écrivant sur la sortie
(principalement la console et un fichier de log).
walid.yaich@espr
14
it.tn
Configuration de
Logback
walid.yaich@espr
15
it.tn
Lire les logs
Date Niveau package Classe Méthode Ligne Message
walid.yaich@espr
16
it.tn
Les niveaux de log
logger.trace(“message”)
Trace Pour tracer en détails l’exécution, c’est le niveau le plus fin.
Debug Pour écrire des détails de bas niveaux pour des raisons de DEBUG
Info Pour écrire ce que le système est en train de faire
Warn Pour écrire les problèmes(avertissements) qui n'empêche pas le système de continuer de fonctionner
Error Pour écrire les erreurs critiques
walid.yaich@espr
17
it.tn
Injection de dépendances
avec Spring
Documentation officielle :
The interface ApplicationContext
represents the Spring IoC container
and is responsible for instantiating,
configuring, and assembling the
aforementioned beans. ● XML
● Java
Aforementioned = previously mentioned ● Annotations
walid.yaich@espr
18
it.tn
Configuration
par XML
Injection par setter
walid.yaich@espr
19
it.tn
Exécution d’une application Spring en
utilisant Maven
Class
Path vers le fichier de conf xml
Cast ID du bean
niveau
1)Aller dans dossier qui contient pom.xml
2)Lancer cette commande maven : mvn clean compile exec:java (la classe main est spécifié dans le pom.xml)
walid.yaich@espr
20
it.tn
Lancer des commandes Maven depuis
Eclipse/STS
walid.yaich@espr
21
it.tn
A vos Clavier !
1. Installer le jdk, STS et SonarLint
2. Importer le projet DependencyInjection_TODO :
https://gitlab.com/Walid-YAICH/DependencyInjection_TODO.git
3. Compléter le code manquant (TODO) dans les différents fichiers.
4. Qu’est ce qu’on devrait voir sur la console si on bascule vers l’implémentation du service SOAP ?
5. Basculer vers l’implémentation SOAP et vérifier les messages sur la console.
6. Changer la configuration du logger Error puis Trace et vérifier l’output sur la console.
Output :
walid.yaich@espr 22
Configuration
par Java
Bean ID
Injection de
dépendances
par setter
walid.yaich@espr
23
it.tn
Configuration
par Java
Préciser la classe de configuration
walid.yaich@espr
24
it.tn
Configuration
par
annotation
Injection de
dépendances
@Component déclare la classe comme Bean dont l’ID sera implicitement le nom
de la classe mais qui commence par miniscule.
walid.yaich@espr
25
it.tn
Configuration
par
annotation
Les packages qui
vont être scannés
Pour préciser la classe
de configuration
walid.yaich@espr
26
it.tn
Avantages et inconvénients de chaque type
de configuration
Java Annotation XML
- Conf centralisée dans un seul - Bien pour un développement
endroit. rapide.
Avantages - Typage fort. - La classe contient déjà sa
configuration
Legacy
- Par rapport au annotation, un - Configuration éparpillée.
code de configuration - Conf et code dans un même
Inconvéniants supplémentaire à écrire. endroit.
C’est possible de mélanger les différents types de
configuration !
walid.yaich@espr
27
it.tn
Spring framework stereotype annotations
Une classe annotée
@component est un Bean
walid.yaich@espr
28
it.tn
Bean Scope
● Singleton : A single instance is used (default).
● prototype : A new instance is created each time the bean is
referenced (getBean or Dependency injection).
● Session : A new instance is created once per user session - web
environment.
● request : A new instance is created once per request - web
environment.
walid.yaich@espr
29
it.tn
Correction sur git
https://gitlab.com/Walid-YAICH/DI_Spring.git
30
Quote of the Day
“Any fool can write code
“ that a computer can
understand. Good
programmers write code
that humans can
understand.”
Martin Fowler walid.yaich@espr
it.tn
31
Merci !
walid.yaich@espr
32
it.tn