Java Spring Boot Et Angular Version
Java Spring Boot Et Angular Version
Java 11 :
Java 17 :
Java 21 :
Angular 9-12 : Ivy devient le moteur par défaut, améliorations des performances.
Angular 16-18 : Signals API, Hydration SSR, nouvelles directives @for et @if.
1. Lambda Expressions
Les expressions lambda permettent d'écrire des fonctions anonymes plus concises.
Exemple
// Avant Java 8
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
};
2. Streams API
Exemple
Les interfaces peuvent désormais avoir des méthodes avec implémentation par défaut.
interface Vehicle {
default void print() {
System.out.println("Ceci est un véhicule");
}
}
Exemple
Exemple
Une Functional Interface est une interface qui ne contient qu'une seule méthode abstraite. Elle
peut contenir des méthodes default ou static, mais ne doit avoir qu'une seule méthode
abstraite. Ces interfaces sont particulièrement utiles pour la programmation fonctionnelle et sont
souvent utilisées avec les expressions lambda et les références de méthode.
✅ Exemple
import java.util.function.Function;
public class FunctionExample {
public static void main(String[] args) {
Function<Integer, Integer> multiplyByTwo = x -> x * 2;
Function<Integer, Integer> addThree = x -> x + 3;
System.out.println(combinedFunction.apply(5)); // (5 * 2) + 3 = 13
}
}
✅ Exemple
import java.util.function.BiFunction;
import java.util.function.Function;
✅ Exemple
import java.util.function.Supplier;
Un Consumer<T> prend une valeur et n'en retourne aucune. Il est utilisé pour effectuer des
actions sur des objets.
✅ Exemple
import java.util.function.Consumer;
Sortie :
Nginx
✅ Exemple
import java.util.function.Predicate;
On peut utiliser var pour déclarer les paramètres d’une expression lambda.
Exemple
Exemple
3. HttpClient
Nouvelle API pour effectuer des requêtes HTTP de manière plus moderne.
Exemple
Exemple
Les records permettent de créer des classes immuables sans code boilerplate.
Exemple
3. Sealed Classes
Exemple
Exemple
Exemple
executor.submit(() -> {
System.out.println("Hello depuis un Virtual Thread !");
});
executor.shutdown();
3. Sequenced Collections
Introduit une nouvelle API pour manipuler des collections de manière ordonnée.
Exemple
Exemple
void process() {
ScopedValue.runWhere(user, "Alice", () -> {
System.out.println("Utilisateur : " + user.get());
});
}
Spring 5 impose Java 8 minimum et apporte une compatibilité avec Java 9+.
@Service
public class UserService {
public Optional<User> findUserById(Long id) {
return userRepository.findById(id);
}
}
Spring WebFlux permet de créer des applications réactives, en alternative à Spring MVC.
@RestController
public class UserController {
@GetMapping("/users")
public Flux<User> getUsers() {
return userService.getAllUsers(); // Renvoie un Flux réactif
}
}
Exemple
Exemple
@Configuration
public class AppConfig {
@Bean
public Supplier<String> messageSupplier() {
return () -> "Hello from Spring 5!";
}
}
🚀 Spring 6 (2022)
Spring 6 a introduit le support de Jakarta EE 9+, des améliorations de sécurité et des
performances accrues.
Spring 6 utilise Jakarta EE 9+, ce qui signifie que les packages javax.* sont maintenant
jakarta.*.
Avant (Spring 5)
import javax.servlet.http.HttpServletRequest;
Après (Spring 6)
import jakarta.servlet.http.HttpServletRequest;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags("application", "MyApp");
}
Exemple
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
// Getters et Setters
}
3. Actuator Amélioré
management.endpoints.web.exposure.include=health,info
1. Passage à Jakarta EE
Exemple
@Bean
Executor virtualThreadExecutor() {
return Executors.newVirtualThreadPerTaskExecutor();
}
Exemple
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags("application", "MyApp");
}
ANGULAR
🚀 Angular 9 (Février 2020)
1. Ivy par défaut
Le moteur de rendu Ivy devient le moteur de compilation et de rendu par défaut, améliorant les
performances et la réduction de la taille des bundles.
Avant Angular 9, les composants inutilisés étaient inclus dans le bundle. Avec Ivy, le tree-
shaking supprime le code inutilisé.
Un nouveau flag --strict pour générer un projet avec des restrictions TypeScript et Angular
strictes.
Le moteur View Engine est supprimé, Angular repose uniquement sur Ivy.
Les composants n'ont plus besoin d'être déclarés dans les entryComponents.
@Component({
standalone: true,
selector: 'app-hello',
template: `<h1>Hello Angular!</h1>`,
})
export class HelloComponent {}
🚀 Angular 15 (Novembre 2022)
1. Amélioration des Standalone APIs
bootstrapApplication(AppComponent, {
providers: [provideRouter(routes)]
});
Les Signals permettent une gestion réactive des états sans RxJS.
increment() {
this.count.set(this.count() + 1);
}
}
@Component({
selector: 'app-example',
template: `
@if (users.length > 0) {
<ul>
@for (user of users; track user.id) {
<li>{{ user.name }}</li>
}
</ul>
}
`,
})
export class ExampleComponent {
users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
}