Introduction
Spring Framework reste le standard pour les applications Java enterprise en 2026. Ce tutoriel avancé vous guide à travers des concepts complexes comme la programmation orientée aspect, les post-processeurs de beans et l'intégration réactive. Vous apprendrez à structurer une application modulaire, testable et performante. Chaque section inclut du code complet prêt à l'emploi pour des scénarios réels de production.
Prérequis
- Java 21+
- Maven 3.9+
- Connaissances solides de Spring Core et Boot
- IDE avec support Spring (IntelliJ IDEA recommandé)
Configuration du projet Maven
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>advanced-spring</artifactId>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>Ce POM inclut les starters essentiels pour AOP et web. Il garantit la compatibilité avec Spring 6.1+ et évite les conflits de dépendances via le parent BOM.
BeanPostProcessor personnalisé
package com.example.advanced;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof Auditable) {
System.out.println("Initialisation de : " + beanName);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}Ce post-processeur intercepte tous les beans et applique une logique avant/après initialisation. Utile pour l'audit ou l'injection dynamique sans modifier les classes cibles.
Aspect AOP pour logging
package com.example.advanced;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.advanced.service.*.*(..))")
public void logBeforeMethod() {
System.out.println("Méthode service appelée");
}
}L'aspect capture les appels aux services via pointcut. Cela centralise le logging transverse sans polluer le code métier.
Service avec annotation personnalisée
package com.example.advanced.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Auditable
public void createUser(String name) {
System.out.println("Utilisateur créé : " + name);
}
}Le service utilise une annotation custom pour marquer les méthodes auditées. Combiné au BeanPostProcessor, cela active le comportement avancé.
Annotation Auditable personnalisée
package com.example.advanced;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Auditable {
}Annotation marqueur simple utilisée pour la détection par le post-processeur ou l'aspect. Elle permet une configuration déclarative propre.
Bonnes pratiques
- Toujours utiliser des annotations @ComponentScan précises pour éviter les scans inutiles
- Préférer les aspects pour les préoccupations transversales
- Documenter les custom BeanPostProcessor
- Utiliser des profils Spring pour les environnements
- Écrire des tests d'intégration avec @SpringBootTest
Erreurs courantes à éviter
- Oublier @EnableAspectJAutoProxy qui désactive les aspects
- Créer des beans avec new() au lieu du contexte Spring
- Ignorer les cycles de vie des beans dans les post-processeurs
- Ne pas gérer les exceptions dans les aspects
Pour aller plus loin
Approfondissez avec nos formations complètes sur learni-group.com/formations.