0% ont trouvé ce document utile (0 vote)
27 vues32 pages

Guide complet sur Spring Framework

Ce document décrit les principaux concepts de Spring Core, Spring Web MVC et leur configuration. Il présente notamment les interfaces d'awareness permettant à un bean de connaître le conteneur, la gestion du cycle de vie des beans, la hiérarchie des contextes WebApplicationContext, et la configuration des servlets et des contrôleurs MVC.

Transféré par

Karim Saber
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
27 vues32 pages

Guide complet sur Spring Framework

Ce document décrit les principaux concepts de Spring Core, Spring Web MVC et leur configuration. Il présente notamment les interfaces d'awareness permettant à un bean de connaître le conteneur, la gestion du cycle de vie des beans, la hiérarchie des contextes WebApplicationContext, et la configuration des servlets et des contrôleurs MVC.

Transféré par

Karim Saber
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Plan

Introduction

Configuration
> Spring Core
Spring Web MVC
Spring Boot
Autres projets et conclusion

• Interfaces d’« awareness »


– Par défaut, un bean ne connaît pas le conteneur.
– Il est possible de rendre le conteneur visible par un
bean à l’aide de l’interface ApplicationContextAware
public class MonBean implements ApplicationContextAware

– En fait, on peut rendre un bean « aware » de


différentes parties du framework
• Contexte (conteneur)
• Contexte Web
• Son nom de bean dans la configuration…
24
Plan
Introduction

Configuration
> Spring Core
Spring Web MVC
Spring Boot
Autres projets et conclusion

• Gestion du cycle de vie


– Il est possible de spécifier les méthodes de cycle de
vie d’un bean dans la configuration
– On appelle ces méthodes « initialization callback » et
« destruction callback »
<bean id="exampleBean" class="[Link]“
init-method="init"
destroy-method="destroy"/>

– Spring fournit des mécanismes plus fins à l’aide des


interfaces LifeCycle et LifeCycleProcessor 25
Plan
Introduction

Configuration
> Spring Core
Spring Web MVC
Spring Boot
Autres projets et conclusion

• Remarques
– Il existe de nombreuses autres options de
configuration
• Collections
• Nested beans
• ...
[Link]
framework-reference/[Link]

26
Plan
Introduction

Spring Web MVC


Spring Core
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• MVC de type 2
– Front controller : DispatcherServlet (fournie par Spring)
– Contrôleurs délégués : composants (@Controller)

Source : [Link]
reference/html/[Link] 27
Plan

WebApplication
Introduction
Spring Core

Context
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Hiérarchies de contextes
– Root : 1 contexte
commun à l’application
– Servlet : des contextes
spécifiques à chaque
DispatcherServlet

Source : [Link]
[Link]/spring-framework-reference/
28
images/[Link]
Plan

WebApplication
Introduction
Spring Core

Context
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Configuration d’un Servlet WebApplicationContext


(obligatoire) 1/2
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>[Link]
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
</web-app>

– Remarques
• Cette configuration nécessite un fichier de configuration de
composants nommé : /WEB-INF/[Link]
• Mapper les URLs sur /* est une mauvaise idée… 29
Plan

WebApplication
Introduction
Spring Core

Context
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Configuration d’un Servlet WebApplicationContext


(obligatoire) 2/2
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-
class>[Link]</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/[Link]</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
</web-app>

– Permet de choisir le(s) nom(s) du(des) fichier(s) XML 30


Plan

WebApplication
Introduction
Spring Core

Context
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Configuration du Root WebApplicationContext


(facultatif)
– Exemple de fichier [Link]
<webapp>
<listener>
<listener-class>
[Link]
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/[Link]
/WEB-INF/[Link]</param-value>
</context-param>
31
</webapp>
Plan
Introduction

Composants MVC
Spring Core
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Exemple de contrôleur annoté


@Controller
@RequestMapping("/appointments")
public class AppointmentsController {
private final AppointmentBook appointmentBook;

@Autowired
public AppointmentsController(AppointmentBook apptmentBook) {
[Link] = apptmentBook;
}

@RequestMapping(method = [Link])
public String get() {
return "appointments/today";
}
}
32
Plan

Frameworks MVC :
Introduction
Spring Core

Spring
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Spring Web MVC


– Méthodes de service (Handler methods)
• Annotées avec @RequestMapping (ou @GetMapping,
@PostMapping…)
• Permettent
– De récupérer les paramètres de la requête
– De faire du data binding entre les paramètres et le modèle
– D’appeler les beans concernés
– De passer les infos (Model) nécessaires à la vue pour générer la
réponse
• [Link]
framework-reference/[Link]#mvc-ann-methods 33
Plan

Frameworks MVC :
Introduction
Spring Core

Spring
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Spring Web MVC


– Méthodes de service (Handler methods)
• Signature « flexible »
– Paramètres
» Model, @ModelAttribute
» Paramètres de la requête : @RequestParam
» Paramètres « classiques des servlets : ServletRequest,
ServletResponse, HttpSession
» …
– Valeurs de retour
» String : nom de vue (cf. slide suivant)
» Objet View
» Objet ModelAndView
» String annotée @ResponseBody
» …
• [Link]
reference/[Link]#mvc-ann-methods 34
Plan

Frameworks MVC :
Introduction
Spring Core

Spring
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• Spring Web MVC


– Méthodes de service (Handler methods)
• Exemples
@RequestMapping
@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
[Link]([Link](number));
// add more ...
}

@PostMapping("/login")
public ModelAndView login(LoginData loginData) {
if ([Link]([Link]())) {
return new ModelAndView("success", new User("test"));
} else {
return new ModelAndView("failure", null);
}
35
}
Plan
Introduction

Composants MVC
Spring Core
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• View resolving
– Objectif : faire correspondre une vue au retour du
contrôleur
– Interface View
• Traite la requête en fonction d’une technologie de vue
(JSP, JSF…)
– Interface ViewResolver
• Fournit un mapping entre nom de vue et objet View

36
Plan
Introduction

Composants MVC
Spring Core
> Spring Web MVC
Spring Boot
Autres projets et conclusion

• View resolving
– Exemple de configuration

<bean id="viewResolver"
class="[Link]
iewResolver">
<property name="viewClass"
value="[Link]"
/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
37
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Position du problème
– Actuellement : de nombreux projets peuvent être liés
à une application Spring
– Framework puissant mais lourd à configurer
• Objectif général
– Simplifier la configuration des projets
• Principe général
– Convention over configuration
38
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Principes
– Créer facilement une application Java standalone
• Avec très peu de configuration
– Les choix de configuration par défaut sont déjà faits (« opinionated »)
• Capable de faire tourner une application Spring (Web ou non)
• Avec en standard la gestion d’un ensemble de préoccupations
non fonctionnelles
– serveurs embarqués, sécurité, métriques, configuration externalisée…
– Pas de génération de code ni de fichier de configuration
XML
– Une interface en ligne de commande pour démarrer plus
rapidement
39
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Utilisation
– Créer un projet Maven qui hérite d’un parent
• spring-boot-starter-parent
– Insérer les dépendances et les plugins nécessaires dans le
[Link]
– Lier le code à une classe principale
• public static void main
– Lancer l’application
• Avec un goal Maven spécifique : mvn spring-boot:run
• Comme une application Java standard : java -jar …
• Générer un fichier war et le déployer sur votre serveur
40
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Exemple
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]-SNAPSHOT</version>
<relativePath/>
</parent>

<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
41
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Fonctionnement
– @EnableAutoConfiguration déclenche un ensemble de
mécanismes qui « devinent » la configuration en fonction
des dépendances dans le [Link]
• Exemple : spring-boot-starter-web  projet Web
• Spring boot essaye aussi de deviner à partir des dépendances
non « spring-boot-starter-… »
– La méthode main appelle la méthode run de
SpringApplication avec en argument
• Le composant Spring principal
• Les arguments éventuellement passés en ligne de commande
42
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Exemple
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!"; }
public static void main(String[] args) throws Exception {
[Link]([Link], args);
}
}
43
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Structuration du code (annotations)


– @EnableAutoConfiguration Identifie la classe
principale et démarre la détection de configuration
– @ComponentScan déclenche la recherche de
composants dans les sous-packages
– @Configuration spécifie une classe de configuration
(annotation Spring standard)

44
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Structuration du code (annotations)


– @SpringBootApplication
• Rassemble les annotations
– @ComponentScan
– @Configuration
– @EnableAutoConfiguration
• À utiliser
– Pour « économiser » les annotations dans un projet standard
– Quand la classe principale n’est pas seule dans un package

45
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Starters
– Dépendances standard aux autres projets Spring dans le
[Link]
– Permettent à Spring Boot de générer une configuration
– Forme
• Starters « officiels » : spring-boot-starter-*
• Possibilité de créer ses starters soi-même : moi-spring-boot-
starter
– Liste des starters officiels
[Link]
SNAPSHOT/reference/htmlsingle/#using-boot-starter 46
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Structuration du code (bonnes pratiques)


– Pas de « default package »
– Position de la classe principale (point d’entrée)
• À la racine et les autres packages au-dessous (meilleure
solution)
• Pas seule dans un package (utiliser l’annotation
@SpringBootApplication)
– Préférer les classes de configuration Java plutôt que
les fichiers de configuration XML

47
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Configuration spécifique
– Si besoin de modifier la configuration par défaut

@Configuration
@EnableAutoConfiguration(
exclude={[Link]})
public class MyConfiguration {
...
}

48
Plan
Introduction

Spring Boot
Spring Core
Spring Web MVC
> Spring Boot
Autres projets et conclusion

• Création d’un projet vide


Spring Initializr : [Link]

49
Plan
Introduction

Spring AOP
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• Deux outils de POA dans Spring


– Spring AOP : basé sur CGLIB (dans Spring Core depuis
V5)
– AspectJ (depuis la version 2.5)
• Spring AOP
– Utilise des classes et de la configuration
• Un aspect est une classe « normale » (POJO)
• Les pointcuts relient le code de l’application aux méthodes
d’un aspect
– Permet le weaving à la compilation et à l’exécution
50
Plan
Introduction

Spring AOP
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• Spring AOP
– Exemple 1 : configuration XML
<aop:config>
<aop:pointcut id="servicePointcut"
expression="execution(* [Link].*.*(..))"/>
<aop:aspect id="loggingAspect" ref="monLogger">
<aop:before method="logMethodEntry"
pointcut-ref="servicePointcut"/>
<aop:after-returning method="logMethodExit"
returning="result" pointcut-
ref="servicePointcut"/>
</aop:aspect>
</aop:config>

<bean id="monLogger" class="[Link]"/>


51
<bean name="monService" class="[Link]" />
Plan
Introduction

Spring AOP
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• Spring AOP
– Exemple 2 : annotations
@Aspect
@Component
public class ExampleAspect {
@Before("execution(* [Link].*.*(..))")
public void doAccessCheck() {
// ...
}
@Around("[Link]()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws
Throwable {
// start stopwatch
Object retVal = [Link]();
// stop stopwatch
return retVal;
}
Source : [Link]
Plan
Introduction

Conclusion
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• Avantages de Spring
– Légèreté du framework (…)
– S’appuie sur des solutions open source éprouvées
– Possibilité de « plugger » d’autres fonctionnalités
– Configuration rapide des applications « simples »
– Très utilisé
– Documentation abondante

53
Plan
Introduction

Conclusion
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• Faiblesses de Spring
– Complexité croissante
• Beaucoup de sous-projets
• 3 types de configurations possibles
• Trop de « magie » ?
– Choix entre Spring et Java EE moins évident
• EJB 3.0 plus simples

54
Plan
Introduction

Références
Spring Core
Spring Web MVC
Spring Boot
> Autres projets et conclusion

• [Link]
• [Link]
framework-reference/html/
• [Link]
framework-reference/html/[Link]
• [Link]
• [Link]
SNAPSHOT/reference/htmlsingle/
• [Link]
• [Link]
55

Vous aimerez peut-être aussi