Tag: micronaut, java, microservices, aot, graalvm, backend
Livello: intermedio
TL;DR: Framework JVM cloud-native che usa la compilazione Ahead-of-Time (AoT) per la Dependency Injection. Garantisce startup ultrarapidi e basso footprint di memoria, ideale per microservizi e serverless.
-
Dependency Injection (DI) e Aspect-Oriented Programming (AOP) risolti interamente a compile-time.
-
Nessun uso di reflection, proxy dinamici o classloading complesso a runtime.
-
Integrazione di prima classe con GraalVM per la generazione di Native Image leggere e veloci.
-
Server HTTP e client HTTP basati su Netty, completamente non bloccanti e reattivi.
-
Micronaut Data genera le query del database a compile-time, abbattendo l'overhead di JPA.
-
Scoperta automatica dei servizi e configurazione distribuita nativamente supportate.
-
Un bean privo di annotazioni di scope esplicite non è un singleton, ma si comporta come un prototype.
-
Q: Che differenza c'è tra l'approccio di Micronaut e quello classico di Spring Boot?R: Micronaut risolve il grafo delle dipendenze in fase di compilazione usando gli annotation processor. Spring usa la reflection a runtime. Questo rende Micronaut più rapido all'avvio e meno esoso di memoria.
-
Q: Come realizzi un'integrazione HTTP verso un'API esterna?R: Creo un'interfaccia Java e le applico l'annotazione @Client. Micronaut genera automaticamente il codice per l'esecuzione della chiamata HTTP a compile-time.
-
Omettere l'annotation processor (micronaut-inject-java) in Maven o Gradle. Questo impedisce la generazione dei bean e fa fallire l'applicazione in avvio.
-
Dimenticare di annotare un servizio con @Singleton. Micronaut creerà una nuova istanza del servizio ad ogni singola iniezione, sprecando memoria.
-
Integrare librerie di terze parti fortemente dipendenti dalla reflection senza fornire i file di configurazione reflection per GraalVM, causando crash nella Native Image.
// Controller REST di base
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/api/greeting")
public class GreetingController {
@Get("/{name}")
public String greet(String name) {
return "Hello, " + name;
}
}
Java
// Client HTTP dichiarativo
import io.micronaut.http.annotation.Get;
import io.micronaut.http.client.annotation.Client;
@Client("https://api.github.com")
public interface GithubClient {
@Get("/users/{username}")
String fetchUser(String username);
}
Bash
# Inizializzare un nuovo progetto tramite CLI
mn create-app com.example.demo --build=gradle --lang=java --features=graalvm
-
[ ] Gestione del contesto di test tramite @MicronautTest
-
[ ] Meccanismi di resilienza: @Retryable, @Fallback e @CircuitBreaker
-
[ ] Utilizzo dei filtri HTTP server e client-side
-
Documentazione Ufficiale Micronaut (docs.micronaut.io)
-
Micronaut Data Guides