Spring Boot â
Extension de Spring đ± qui simplifie la crĂ©ation d'applications Java â autonomes et prĂȘtes Ă l'emploi. Il Ă©limine la configuration complexe grĂące Ă :
- Convention Over Configuration ;
- Un serveur embarqué (Tomcat, Jetty) ;
- Un systĂšme d'"Auto-Configuration" intelligent ;
Il suffit de l'annotation @SpringBootApplication
pour démarrer un projet rapidement...
Spring đ± â
Framework Open-Source pour le dĂ©veloppement d'applications Java â, axĂ© sur la crĂ©ation de systĂšmes flexibles, testables et facilement maintenable. Il repose sur des concepts clĂ©s comme l'Inversion of Control (IoC) et l'Injection de DĂ©pendances (DI) pour simplifier la gestion des composants. Spring đ± offre Ă©galement des modules pour la gestion des donnĂ©es (Spring Data), la sĂ©curitĂ© (Spring Security), et bien plus encore...
Bean â
Un Bean est un objet géré par le Spring IoC Container. Il est instancié, configuré et géré par le conteneur tout au long de son cycle de vie à la maniÚre d'un Singleton (c'est-à -dire qu'une seule instance est créée pour tout le conteneur). Les Bean's sont créés à partir de classes annotées avec des stéréotypes (@interface
) comme @Component
, @Service
, @Repository
ou définis via @Bean
dans une classe de configuration.
Cycle de Vie :
- Instantiation : Le conteneur crée une instance du Bean ;
- Injection des Dépendances : Les dépendances sont injectées (via
@Autowired
ou constructeur) ; - Initialisation : La méthode annotée avec
@PostConstruct
est exĂ©cutĂ©e ; - Utilisation : Le Bean est prĂȘt Ă ĂȘtre utilisĂ© dans l'application ;
- Destruction : Avant sa suppression, la méthode annotée avec
@PreDestroy
est appelée ;
Inversion of Control â
L'Inversion of Control (IoC) est un principe de conception oĂč le contrĂŽle de l'instanciation et de la gestion des dĂ©pendances est dĂ©lĂ©guĂ© Ă un conteneur externe plutĂŽt qu'au code lui-mĂȘme.
class Engine {
void start() {
System.out.println("Starting...");
}
}
class Robot {
private Engine engine;
public Robot() {
this.engine = new Engine();
}
void run() {
engine.start();
System.out.println("Running...");
}
}
public class Main {
public static void main(String[] args) {
Robot robot = new Robot();
robot.run();
}
}
â Sans Injection de DĂ©pendance : Couplage Fort !
class Engine {
void start() {
System.out.println("Starting...");
}
}
class Robot {
private final Engine engine;
public Robot(Engine engine) {
this.engine = engine;
}
void run() {
engine.start();
System.out.println("Running...");
}
}
public class Main {
public static void main(String[] args) {
Engine engine = new Engine();
Robot robot = new Robot(engine);
robot.run();
}
}
â Avec Injection de DĂ©pendance : Couplage Faible !
Annotations âïž â
Spring Core â
Annotation | Description |
---|---|
@Configuration | Indique qu'une classe contient des définitions de Bean's via des méthodes annotées @Bean |
@Bean | DĂ©clare un Bean manuel dans le contexte Spring đ± (souvent utilisĂ© dans les classes @Configuration ) |
@Component | Marque une classe comme un Bean détectable automatiquement lors de la détection de composants (@ComponentScan ) |
@Autowired | Effectue l'Injection de DĂ©pendances automatique par le conteneur Spring đ± |
@Qualifier("beanName") | Spécifie quel Bean injecter lorsque plusieurs implémentations sont disponibles |
@PostConstruct | Méthode exécutée aprÚs l'instanciation du Bean (utile pour l'initialisation de données) |
@PreDestroy | Méthode exécutée juste avant la destruction du Bean (utile pour fermer des connexions) |
Hors "Spring Core" Strict...
Annotation | Description |
---|---|
@PropertySource("classpath:app.properties") | Charge un fichier de propriĂ©tĂ©s externe dans le contexte Spring đ± |
@Value("${property.name}") | Injecte une valeur depuis un fichier de propriétés dans un champ ou un paramÚtre |
@Service | Spécialisation de @Component , utilisée pour marquer les classes de logique métier |
Spring Data â
Gestion des Entités
Annotation | Description |
---|---|
@Repository | Indique que la classe est un "Repository" JPA, un composant qui encapsule l'accÚs aux données (DAO) |
@Entity | Marque une classe Java â comme une entitĂ© JPA liĂ©e Ă une table en base de donnĂ©es |
@Table | Définit le nom de la table SQL associée à l'entité |
@Id | Définit l'attribut comme la clé primaire de l'entité |
@Column | Spécifie des propriétés supplémentaires pour la colonne associée à un attribut (nom, longueur, etc...) |
@Transactional | Marque une méthode ou une classe comme étant "Transactionnelle", ce qui permet de gérer l'atomicité des données pendant l'exécution de la méthode |
Gestion des Relations
Annotation | Description |
---|---|
@OneToOne | Définit une relation "un à un" entre deux entités |
@OneToMany | Définit une relation "un à plusieurs" entre une entité et plusieurs autres entités |
@ManyToOne | Définit une relation "plusieurs à un" entre plusieurs entités et une entité principale |
@ManyToMany | Définit une relation plusieurs à plusieurs entre deux entités |
Spring MVC â
Gestion du ContrÎleur et de la Réponse
Annotation | Description |
---|---|
@Controller | DĂ©finit une classe comme contrĂŽleur pour gĂ©rer les requĂȘtes Web |
@RestController | Combine @Controller et @ResponseBody pour crĂ©er des API REST oĂč les rĂ©ponses sont en application/json |
@ResponseBody | Indique que la valeur de retour d'une méthode est directement écrite dans la réponse HTTP |
@ResponseHeader | Permet d'ajouter des en-tĂȘtes HTTP personnalisĂ©s dans la rĂ©ponse |
Gestion du Mapping de la RequĂȘte
Annotation | Description |
---|---|
@RequestMapping | Mapping gĂ©nĂ©ral d'une requĂȘte HTTP (GET, POST, etc...) Ă une mĂ©thode ou classe |
@GetMapping | Raccourci de @RequestMapping(method = RequestMethod.GET) pour les requĂȘtes GET |
@PostMapping | Raccourci de @RequestMapping(method = RequestMethod.POST) pour les requĂȘtes POST |
Gestion des ParamĂštres et du Cors de la RequĂȘte
Annotation | Description |
---|---|
@PathVariable | Extrait une valeur dynamique de l'URL |
@RequestParam | RĂ©cupĂšre les paramĂštres de requĂȘte |
@RequestBody | Convertit le corps de la requĂȘte application/json en un objet Java â |
@RequestHeader | Extrait les en-tĂȘtes HTTP de la requĂȘte (Authorization , Content-Type , etc...) |
Spring Security â
Gestion de la Sécurité
Annotation | Description |
---|---|
@EnableWebSecurity | Active la configuration de Spring Security pour sĂ©curiser les requĂȘtes Web |
@EnableGlobalMethodSecurity | Active la sécurité au niveau des méthodes (via @Secured , @PreAuthorize , etc...) |
Gestion du ContrÎle d'AccÚs aux Méthodes
Annotation | Description |
---|---|
@Secured("ROLE_ADMIN") | Restreint l'accÚs à la méthode aux utilisateurs ayant le rÎle spécifié |
@RolesAllowed("ROLE_USER") | Equivalent à @Secured , mais conforme à la spécification JSR-250 |
@PreAuthorize | Ăvalue une expression Spring Expression Language (SpEL) avant l'exĂ©cution de la mĂ©thode |
@PostAuthorize | Ăvalue une expression Spring Expression Language (SpEL) aprĂšs l'exĂ©cution de la mĂ©thode |
Exception Handler â
Annotation | Description |
---|---|
@ControllerAdvice | Définit une classe globale pour gérer les exceptions, les "bindings" et les logiques applicatives communes |
@ExceptionHandler | Indique qu'une méthode est un gestionnaire d'exceptions pour un ou plusieurs types d'exceptions spécifiés |
Cache â
Gestion du "Cache Manager" (EhCache / Caffeine / Redis)
Annotation | Description |
---|---|
@EnableCaching | Active la gestion du cache dans une application Spring đ±, ce qui permet d'utiliser les annotations de cache sur les mĂ©thodes |
@Cacheable | Indique que le rĂ©sultat d'une mĂ©thode doit ĂȘtre mis en cache ; Si la mĂ©thode est appelĂ©e avec les mĂȘmes arguments, le cache est retournĂ© au lieu d'exĂ©cuter la mĂ©thode |
@CacheEvict | Permet de supprimer un ou plusieurs Ă©lĂ©ments du cache ; Cette annotation peut ĂȘtre utilisĂ©e aprĂšs l'exĂ©cution d'une mĂ©thode pour invalider le cache d'une ou plusieurs clĂ©s |
@CachePut | Met à jour le cache aprÚs l'exécution d'une méthode ; Contrairement à @Cacheable , la méthode s'exécute toujours et le résultat est ensuite mis à jour dans le cache |
Lombok đ¶ïž â
Annotation | Description |
---|---|
@Data | GénÚre toutes les méthodes nécessaires : @Getter , @Setter , @RequiredArgsConstructor , @EqualsAndHashCode et @ToString |
@Getter | GénÚre un "Getter" pour tous les attributs de la classe |
@Setter | GénÚre un "Setter" pour tous les attributs de la classe |
@Builder | GĂ©nĂšre un Builder pour crĂ©er des objets de maniĂšre fluide (mĂȘme avec des arguments nommĂ©s) |
@NoArgsConstructor | GénÚre un constructeur sans argument pour la classe |
@AllArgsConstructor | GénÚre un constructeur avec tous les arguments (tous les champs de la classe) |
@EqualsAndHashCode | GénÚre les méthodes equals() et hashCode() basées sur les attributs de la classe |
@ToString | GénÚre la méthode toString() qui retourne une représentation textuelle de l'objet |
Simple Logging Facade For Java â
Annotation | Description |
---|---|
@Slf4j | GénÚre un objet Logger avec le nom de la classe pour faciliter l'enregistrement des logs via SLF4J |
JUnit â
Gestion des Tests Unitaires avec Mockito
Annotation | Description |
---|---|
@RunWith | Spécifie un "Runner" pour exécuter les tests (@RunWith(MockitoJUnitRunner.class) , @RunWith(SpringRunner.class) ) |
@ExtendWith | Utilisé avec JUnit v5 pour intégrer des extensions, comme @ExtendWith(SpringExtension.class) pour intégrer Spring dans les tests unitaires |
@SpringBootTest | Indique que le test doit charger le contexte Spring Boot pour tester l'application en environnement intégré |
@MockBean / @MockitoBean | CrĂ©e un Mock pour une dĂ©pendance Spring đ± et l'injecte dans le contexte d'application |
@Mock | Utilisé pour créer des Mocks d'objets dans les tests avec Mockito |
@InjectMocks | Indique à Mockito d'injecter les Mocks dans l'objet testé (généralement un service ou un contrÎleur) |
@AutoConfigureMockMvc | Active la configuration de MockMVC pour les tests d'intégration des contrÎleurs Spring MVC sans démarrer un serveur |
@WebMvcTest | Lance un test limité à la couche Web MVC de Spring, en se concentrant sur les contrÎleurs et leurs interactions HTTP (sans le contexte de l'application) |
@AutoConfigureWireMock | Active la configuration de WireMock pour simuler des services externes (API, bases de données, etc...) dans les tests d'intégration |
Spring WebFlux đ â
Spring WebFlux est un framework rĂ©actif de Spring đ± qui permet de dĂ©velopper des applications Web asynchrones et non-bloquantes. Il repose sur le Project Reactor, qui implĂ©mente les Reactive Streams, une spĂ©cification pour le traitement asynchrone de flux de donnĂ©es.
- Project Reactor est une bibliothĂšque Java â rĂ©active qui fournit les abstractions de Mono (pour un seul Ă©lĂ©ment) et Flux (pour un flux d'Ă©lĂ©ments) pour la gestion de donnĂ©es de maniĂšre rĂ©active ;
Mono<T>
est utilisé pour représenter un flux contenant zéro ou un élément ;Flux<T>
est utilisé pour des flux contenant zéro à plusieurs éléments ;- WebClient est un composant de Spring WebFlux qui permet de faire des appels HTTP de maniÚre asynchrone et non-bloquante ;