Micronaut — Cheat Sheet

Tag: micronaut, java, framework, microservices, aot, graalvm, di

Livello: intermedio

TL;DR: Framework JVM moderno ottimizzato per microservizi e serverless. Usa l'Ahead-of-Time (AoT) compilation per garantire avvii rapidi e basso consumo di memoria.

Concetti chiave

Esegue Dependency Injection (DI) e Aspect-Oriented Programming (AOP) a tempo di compilazione.

Elimina quasi completamente l'uso della reflection a runtime per migliorare drasticamente le performance.

Il consumo di memoria (heap) e i tempi di avvio rimangono bassi e costanti all'aumentare delle classi.

Ottima sinergia con GraalVM per generare eseguibili nativi (native image) ad altissime prestazioni.

Progettato nativamente per il cloud, include client HTTP dichiarativi e service discovery integrata.

Supporto integrato per architetture reattive (RxJava, Project Reactor) e server netty-based.

Domande tipiche e risposte pronte

Q: Qual è la differenza principale tra Micronaut e Spring Boot in termini di esecuzione?

R: Micronaut risolve l'albero della DI in fase di build tramite annotation processor, Spring tradizionale lo fa a runtime via reflection.

Q: Come si gestisce l'inversione di controllo senza usare la reflection a runtime?

R: Si sfruttano i processori di annotazioni (APT in Java o KAPT in Kotlin) per generare il codice pre-calcolato durante la build.

Insidie e errori comuni

Configurare in modo errato l'ordine o i path degli annotation processor nel sistema di build, bloccando l'iniezione delle dipendenze.

Includere librerie di terze parti pesantemente basate sulla reflection, rompendo la compatibilità con la compilazione nativa GraalVM.

Dimenticare che i controller e i bean sono spesso singleton di default, causando race condition se si usa stato mutabile.

Snippet e comandiJava

```import io.micronaut.http.annotation.Controller;

import io.micronaut.http.annotation.Get;

@Controller("/api/v1/status")

public class StatusController {

@Get("/")

public String checkStatus() {

return "UP";

}

}

```

Da ripassare

[ ] Configurazione fine per la generazione di GraalVM Native Image.

[ ] Creazione e ciclo di vita di filtri HTTP e interceptor custom per le metriche.

Jarvis Interviews
Jarvis