Spring framework 6

Spring Framework 6, rilasciato a novembre 2022, è il principale cambiamento di versione e contiene molte funzionalità aggiornate e modifiche nell’ambiente di sviluppo Spring. D’altra parte, anche Spring Boot 3, rilasciato a novembre 2022, è basato su Spring Framework 6, cambia anche molte cose. Abbiamo bisogno di conoscere i cambiamenti nelle nuove versioni per rendere agevole lo sviluppo di un’applicazione in futuro.

Versione Java aggiornata a Java 17
Per potenziare il framework e le applicazioni, la versione JDK minima richiesta per fare funzionare Spring Framework 6 è JDK 17, che è l’ultima versione LTS (supportata a lungo termine). Java 17 include varie nuove funzionalità in termini di linguaggio (blocchi di testo, espressioni switch), librerie di base (metodo factory di raccolta, ecc.), sistema di tipo (record, classi sigillate), sistema di moduli (introspezione del modulo, scansione del percorso del modulo) ecc. Quindi, Spring Framework 6 trae i massimi benefici dalle API di Java 17. Spring.

Andando avanti, Spring consiglierà di utilizzare le ultime versioni JDK/JVM disponibili. Ad esempio, se hai intenzione di aggiornare le tue versioni Spring come 6.1, 6.2, 6.3, ecc., considera di aggiornare in parallelo anche l’ultima versione JDK disponibile.

È previsto il rilascio del framework Spring 6.1 GA con il supporto di due principali versioni LTS di JDK, JDK 17 e JDK 21.

Modificato il namespace da Java EE con Jakarta EE
Spring Framework 6 viene migrato verso Jakarta EE da Java EE. Quindi, utilizzerà il namespace dei pacchetti “jakarta” al posto dello namespace”javax”. Ad esempio, le importazioni da “javax.servlet” vengono aggiornate a “jakarta.servlet”. Sebbene Jakarta 9 sia la linea di base per Spring Framework 6, Spring consiglia di utilizzare l’ultima versione disponibile (Jakarta 10 al momento). Ad esempio, Tomcat 10 ha sede a Jakarta EE 9, mentre Tomcat 10.1 ha sede a Jakarta EE 10. Il framework Spring consiglia di utilizzare l’ultima versione compatibile di Jakarta EE.

AOT (Ahead-Of-Time): pre-elaborazione in fase di compilazione delle definizioni dei bean
Questo è il nuovo concetto introdotto in questa versione come alternativa promettente per il bootstrap veloce delle applicazioni Spring. Tipicamente nel processo di sviluppo, compiliamo le classi e le impacchettiamo prima della distribuzione. AOT si trova tra la compilazione e il confezionamento. Il compilatore Java, quindi una serie di passaggi AOT, quindi impacchetta l’applicazione nell’unità di distribuzione. Il concetto AOT è utile se sei disposto a fare ulteriori passi in fase di compilazione e ridurre il tempo di avvio. È noto per la configurazione di build aggiuntiva e la minore flessibilità in fase di esecuzione.

L’applicazione Spring, legge tutti i suggerimenti di runtime e li inserisce nelle immagini native di GraalVM e lascia che GraalVM faccia il suo lavoro. Per il supporto di produzione iniziale, la disposizione AOT in Spring Boot 6.0 viene fornita con la pre-elaborazione del contesto dell’applicazione basata su Spring in fase di compilazione per un avvio più efficiente in fase di esecuzione e per l’input all’immagine nativa di GraalVM.

Eseguibili nativi di GraalVM
GraalVM è un JDK ad alte prestazioni destinato a velocizzare l’esecuzione di applicazioni scritte in Java e altri linguaggi JVM.

Le immagini native di GraalVM sono eseguibili autonomi che possono essere generati elaborando in anticipo le applicazioni Java compilate. Le immagini native generalmente hanno un footprint di memoria inferiore e si avviano più velocemente rispetto alle loro controparti JVM. Le immagini native di GraalVM forniscono un nuovo modo per distribuire ed eseguire applicazioni Java. Rispetto alla macchina virtuale Java. Le immagini native possono essere eseguite con un footprint di memoria inferiore e con tempi di avvio molto più rapidi.

Gli eseguibili nativi di GraalVM nelle immagini native sono una modalità di distribuzione diversa con forti vantaggi e limitazioni. L’elaborazione AOT è la precondizione per trasformare un’applicazione basata su Spring in un eseguibile nativo di GraalVM. Dobbiamo eseguire i passaggi AOT prima che arrivi lo strumento di immagine nativa GraalVM. Questo perché GraalVM richiede obbligatoriamente l’output dei passaggi AOT per produrre l’immagine nativa GraalVM. In effetti, l’immagine nativa includerà solo quegli artefatti che le dici di includere.

Gli approcci AOT e GraalVM sono validi solo se possono essere utilizzati per uno stack completo. Non sono abbastanza buoni in un’applicazione isolata basata su Spring. Hanno davvero bisogno di lavorare con uno Spring Boot Stack completo.

Modifiche nel Core Container
L’annotazione @Inject rientra nelle annotazioni JSR-330. Spring fornisce supporto per le annotazioni JSR 330 dalla primavera 3.0. Spring Framework 6 in poi, si troverà in jakarta.inject.

Allo stesso modo, @PostConstruct e @PreDestroy rientrano nelle annotazioni JSR-250. Spring Framework 6 in poi, @PostConstruct e @PreDestroy si troveranno in ‘jakarta.annotation’.

L’obiettivo principale delle annotazioni JSR (Java Specification Request) era definire un insieme di annotazioni che affrontano concetti sintattici comuni e quindi possono essere utilizzate da molte tecnologie Java EE e Java SE. Per saperne di più su JSR, consultare la documentazione JSR.

LocalVariableTableParameterNameDiscoverer ora è deprecato.

ListenableFuture è stato deprecato a favore di CompletableFuture.

SimpleEvaluationContext disabilita ora le allocazioni di array, in linea con la normale risoluzione del costruttore.

Modifica di HttpMethod da Enum a Class
Spring Framework 6 ha cambiato HttpMethod da enum a class.

HttpMethod non è più un enum. Ora è una classe. Sebbene l’API pubblica sia stata sostenuta, potrebbe essere necessaria una migrazione (ad esempio, passare da EnumSet a Set, utilizzare if else invece di switch).

È ovvio che avremo bisogno di una nuova build per questo, ma questo era dovuto da tempo.

Applicazioni web
Con la nuova versione Spring Framework 6, a causa della migrazione Jakarta EE, i server Web vengono aggiornati a Tomcat 10, Jetty 11 o Undertow 2.2.19 con undertow-servlet-jakarta. Inoltre, le importazioni da javax.servlet vengono aggiornate a jakarta.servlet. Tuttavia, per generare il server più recente, considera Tomcat 10.1 e Undertow 2.3 (Jakarta EE 10).

Spring Framework 6 ha abbandonato diverse integrazioni obsolete basate su Servlet come Apache Commons FileUpload, Apache Tiles, supporto FreeMarker JSP. Invece, Spring Framework 6 consiglia “org.springframework.web.multipart.support.StandardServletMultipartResolver” per i caricamenti di file in più parti e le normali visualizzazioni del modello FreeMarker, se necessario. Questa nuova versione si concentra maggiormente sulle architetture web orientate a REST.

Spring Framework 6.0 introduce una modifica nel rilevamento del controller per Spring MVC e Spring WebFlux. Spring MVC e Spring WebFlux non rilevano più i controller basati esclusivamente su un’annotazione @RequestMapping a livello di tipo. Nelle versioni precedenti, una classe annotata con @RequestMapping solo al livello superiore veniva registrata come gestore, anche senza l’annotazione @Controller o @RestController. Con Spring Framework 6, è richiesta l’annotazione @Controller.

Qual è la roadmap per il rilascio di Spring Framework?
La prossima versione di Spring Framework, che è Spring Framework 6.1 GA, verrà rilasciata nel prossimo Novembre 2023. D’altra parte, ci saranno due versioni di Spring Boot, ovvero Spring Boot 3.0 e 3.1 fino a novembre 2023. It significa che Spring Framework avrà una versione all’anno, mentre Spring boot avrà due versioni all’anno. Di seguito è riportata la tabella di marcia per lo stesso.

Spring Framework 6.0 GA: novembre 2022

Base per Spring Boot 3.0 e 3.1
Produzione pronta su JDK 17 LTS
Flusso regolare di versioni di miglioramento 6.0.x
Spring Framework 6.1 GA: novembre 2023

Base per Spring Boot 3.0 e 3.1
Produzione pronta su JDK 17 e 21 LTS
Flusso regolare di versioni di miglioramento 6.1.x
Andando avanti, la roadmap di rilascio funzionerà in questo modo.

Spring Framework 6.1 GA: novembre 2023

Base per Spring Boot 3.0 e 3.1
Produzione pronta su JDK 17 e 21 LTS
Flusso regolare di versioni di miglioramento 6.1.x
Andando avanti, la roadmap di rilascio funzionerà in questo modo.

(Fonte1) (Fonte2)

Innovaformazione, scuola informatica specialistica segue le tecnologie ed il trend del mercato del software. Nell’offerta formativa trovate il Corso Spring framework (rivolto alle aziende).

INFO: info@innovaformazione.net / tel. 3471012275 (Dario Carrassi) .

Ti potrebbe interessare

Articoli correlati