Spring: il framework per le applicazioni Java più complesse
Rod Johnson, sviluppatore australiano, presentò nel 2002 il codice del framework Java Interface 21 nella sua opera “Expert One-on-One J2EE Design and Development”, scritto specificamente per l’utilizzo nei suoi progetti di allora. Sulla base di questo stesso codice egli sviluppò successivamente, assieme ad altri programmatori, il framework Spring, pubblicato per la prima volta nel Giugno 2003 su SourceForge sotto la licenza gratuita Apache 2.0, e che ancora oggi rimane una delle soluzioni più popolari per lo sviluppo di applicazioni aziendali con Java. Da allora il framework open source ha posto rimedio, e continua a farlo, alle debolezze e alle limitazioni dell’ambiente di sviluppo J2EE, oggi comunemente conosciuto anche come “piattaforma Java”, e dei componenti software Enterprise JavaBeans (EJB), riducendo dunque drasticamente la loro complessità.
Che cos’è Spring?
Spring semplifica lo sviluppo delle applicazioni Java, indipendentemente che si tratti di una comune applicazione offline o di un’applicazione web. I maggiori vantaggi del framework sono i suoi agili codici sorgente e la facilità con la quale è possibile adattare il framework alle proprie esigenze. Per poter offrire questo comfort al programmatore, il framework si basa sui seguenti principi, già illustrati da Rod Johnson nel suo libro:
- Dependency Injection (DI): nel campo della programmazione orientata agli oggetti si intende per Dependency Injection un’istanza esterna che regola preventivamente le subordinazioni degli oggetti. Spring utilizza a questo scopo delle componenti Java JavaBeans. Tra le altre cose esse fungono in Java come container della trasmissione dei dati, perciò servono da formulario per tutte le risorse gestite all’interno del framework Spring, risorse anche riferite come Beans. In questo modo Spring agisce da container, mettendo a disposizione del vostro progetto sviluppato con Java le classi preconfigurate, con incluse le relative subordinazioni.
- Programmazione orientata agli aspetti (AOP): per aumentare ulteriormente la modularità delle applicazioni orientate agli oggetti, Spring offre opzionalmente anche un approccio alla programmazione orientata agli aspetti con il linguaggio AspectJ. In tal modo gli aspetti inevitabili all’interno dei sistemi complessi possono essere strutturati sintatticamente; inclusi anche quegli aspetti che mettono in connessione più componenti. Questo porta con sé il vantaggio che il codice di programmazione viene separato dai processi tecnici come la gestione degli errori, la validazione o la sicurezza.
- Template: come template in Spring vengono definite classi per diverse le interfacce di programmazione di un’applicazione, semplificando così il lavoro con le API; in quanto esse offrono una gestione automatica delle risorse, una gestione unitaria degli errori e altri vantaggiosi aiuti.
Spring: introduzione ai moduli principali
Spring è un’ottima scelta per gli utilizzi più disparati, e ciò lo si deve alla sua struttura modulare. Sviluppando il vostro progetto con Spring avrete a disposizione circa venti moduli e la possibilità di scegliere quali di questi facciano al caso vostro e quali no. Nell’architettura standard del framework i vari moduli sono suddivisi tra le seguenti sei macro categorie:
- Core Container: Il Core Container contiene i moduli elementari quali sprin-core, spring-beans, spring-context, spring-context-support e spring-expression. Core e Beans formano la struttura di base del framework e contengono ad esempio la funzione Dependency Injection e il supporto per le POJO. Il modulo Context eredita le sue caratteristiche dal modulo Beans ed aggiunge all’applicazione funzioni come possono essere l’internazionalizzazione o il caricamento delle risorse. In aggiunta esso supporta le funzioni di Java Enterprise come EJB e JMX (Java Management Extensions). Grazie a Context-Support le librerie di terzi possono essere importate in Spring. Spring-expression contiene Spring Expression Language (SPeL), una estensione di Unified Expression Language, specifica di JSP 2.1 (JavaServer Pages).
- AOP e Instrumentation: per rendere possibile la programmazione orientata agli aspetti, il framework Spring contiene i moduli spring-aop e spring-aspects per l’integrazione del già accennato linguaggio AspectJ. Le componenti di spring-instrument permettono di strumentalizzare le classi Java, ovvero di apportare modifiche a runtime a Bytecode, e aggiunge tra l’altro le implementazioni ClassLoader per diversi application server.
- Messaging: Spring dispone di alcune funzioni chiave del progetto Spring Integration per poter fungere da punto di partenza per le applicazioni basate su messaggio; tali funzioni sono ad esempio “Message”, “MessageChannel” o “MessageHandler”. Il modulo corrispondente porta il nome di spring-messaging.
- Data Access/Integration: i formulari di queste categorie servono a garantire alle applicazioni Java le capacità necessarie per l’interazione con altre applicazioni e a regolare l’accesso ai dati. Il formulario spring-jdbc, ad esempio, mette a disposizione uno strato di astrazione, il quale definisce il modo in cui un client accede alla banca dati, rendendo vana la scomoda codifica JDBC tipicamente usata. Spring-orm contiene invece gli strati d’integrazione per le popolari interfacce ORM, con le quali è possibile servirsi dei database relazionali. Le altre componenti sono spring-tx, che supporta la gestione programmatica delle transazioni per tutte le classi e per tutti i POJO, spring-oxm, contenente lo strato di astrazione per l’Object Mapping e per il XML Mapping, e spring-jms, un formulario con le caratteristiche per la produzione e l’elaborazione di messaggi.
- Web: in questa categoria si trovano i formulari specifici per le applicazioni web, ovvero spring-web, spring-webmvc e spring-websocket. La prima aggiunge all’applicazione Java le tipiche caratteristiche Integration orientate al web, come ad esempio la funzione di upload per i dati divisi in più parti (funzione multipart) o un client HTTP. Il formulario spring-webmvc viene anch’essa definita come web Servlet e contiene le implementazioni di Spring per la realizzazione dell’architettura di default Model-View-Controller e dei REST web services. Spring-websocket permette la trasmissione dei dati tra client e server sulla base di WebSockets.
- Test: il formulario spring-test permette di verificare la funzionalità delle componenti della vostra applicazione Java. Tramite di esso infatti potete sottoporre tali componenti con i relativi framework aggiuntivi, quali JUnit o TestNG, ad un’analisi esaustiva tramite i test Unit, con focus su una singola componente, così come i test Integrations, con focus su più componenti messe in relazione tra loro.
Spring: Java nel moderno sviluppo web
Sin da principio, Java e le tecnologie ad esso collegate erano state pensate per l’utilizzo nello sviluppo web. Tuttavia, dopo le difficoltà iniziali dovute al poco supporto ricevuto dai browser dell’epoca, alla larghezza di banda ridotta delle connessioni Internet private e all’insufficiente capacità di calcolo dei PC del tempo, il linguaggio di programmazione subì un forte contraccolpo alla fine degli anni ’90. Ciononostante agli inizi del World Wide Web le Java Applets erano ancora popolari.
Per Java Applets si intendono le applicazioni scritte in Java che grazie all’ambiente di runtime venivano eseguite nel browser ed erano in grado di interagire con l’utente, senza tra l’altro dover inviare dati al server. Ma a causa della mole di risorse necessarie, esse risultavano poco pratiche. Con l’ascesa dei dispositivi mobili, il cui browser non supporta le Applets, gli elementi web interattivi sono stati spazzati via completamente.
Sebbene Java si sia presto rivelata essere un flop come frontend, il linguaggio di programmazione è tuttavia riuscito ad affermarsi su lato server, dove gli scenari di utilizzo sono molto diversi e vanno dai Servlets, gli Applet Pendants eseguiti sui server, alle soluzioni aziendali complesse come Middleware, software per le banche o grandi sistemi di Content Management. Oggigiorno le tecnologie Java sono più richieste che mai, o almeno fin quando il budget lo permette. Sulla base dei vantaggi offerti in merito a costi e dispendio di tempo, circa tre quarti di tutti i siti web fanno uso del linguaggio di scripting PHP.
Per gli sviluppatori web, i quali tuttavia lavorano con Java, Spring offre sia la struttura necessaria che anche una semplificazione notevole del processo di lavoro. I benefici che porta l’affidarsi a Java per lo sviluppo delle proprie applicazioni web sono tra gli altri il fatto di essere un linguaggio multipiattaforma e la capacità di integrazione dei software e dei processi delle aziende, così come della loro struttura semplice e chiara.
Per Java Applets si intendono le applicazioni scritte in Java che grazie all’ambiente di runtime venivano eseguite nel browser ed erano in grado di interagire con l’utente, senza tra l’altro dover inviare dati al server. Ma a causa della mole di risorse necessarie, esse risultavano poco pratiche. Con l’ascesa dei dispositivi mobili, il cui browser non supporta le Applets, gli elementi web interattivi sono stati spazzati via completamente.
Sebbene Java si sia presto rivelata essere un flop come frontend, il linguaggio di programmazione è tuttavia riuscito ad affermarsi su lato server, dove gli scenari di utilizzo sono molto diversi e vanno dai Servlets, gli Applet Pendants eseguiti sui server, alle soluzioni aziendali complesse come Middleware, software per le banche o grandi sistemi di Content Management. Oggigiorno le tecnologie Java sono più richieste che mai, o almeno fin quando il budget lo permette. Sulla base dei vantaggi offerti in merito a costi e dispendio di tempo, circa tre quarti di tutti i siti web fanno uso del linguaggio di scripting PHP.
Per gli sviluppatori web, i quali tuttavia lavorano con Java, Spring offre sia la struttura necessaria che anche una semplificazione notevole del processo di lavoro. I benefici che porta l’affidarsi a Java per lo sviluppo delle proprie applicazioni web sono tra gli altri il fatto di essere un linguaggio multipiattaforma e la capacità di integrazione dei software e dei processi delle aziende, così come della loro struttura semplice e chiara.
Per quale progetto è più adatto il framework Spring?
Spring viene solitamente definito anche come Lightweight Framework per applicazioni Java, ovvero un framework leggero; questo perché non sono necessari adattamenti di alcun tipo al codice sorgente per poter approfittare dei numerosi vantaggi che esso ha da offrire. Tra le altre cose va anche considerata la realizzazione della gestione della transazionalità, delle interfacce e dell’accesso alla banca dati. La possibilità di condurre dei test sulle varie unità e sull’integrazione è un ulteriore motivo della popolarità del framework Spring. Tuttavia il merito maggior di Spring è senza dubbio l’abbandono dei componenti non standardizzati e specifici per le singole piattaforme, rinuncia che lo rende di diritto un framework portatile e indipendente dagli application server. Per questo motivo lo si può infatti utilizzare senza problemi come meta framework, in quanto possono essere integrate altri componenti esterni o addirittura interi framework aggiuntivi. Un tipico esempio di utilizzo è lo sviluppo di un backend tramite Spring, il quale verrà successivamente collegato ad un frontend, e che per la creazione del quale prima bisognava fare affidamento ad un framework UI come ad esempio Twitter Bootstrap. Spring dà il meglio di sé quando viene utilizzato per la creazione di applicazioni pensate per curare i propri affari. Per le aziende il framework Spring, così come Java in generale, risulta perciò da anni un’ottima scelta, al fine di implementare le tecnologie necessarie. Diversamente dai framework web puri, come ad esempio il progetto concorrente Struts di Apache, Spring non è limitato ad essere una applicazione web, piuttosto esso permette lo sviluppo di soluzioni native per desktop. Per applicazioni semplici invece, che siano online o offline, Java e Spring sono tuttavia meno adatti. Ciononostante rimane il fatto che la creazione di tali progetti risulti comunque possibile.
Panoramica sui vantaggi di Spring
Se vi state apprestando ad iniziare lo sviluppo del vostro prossimo grande progetto e siete alla ricerca di un framework adatto, dovreste prendere seriamente in considerazione il framework Spring. In particolare se avete comunque intenzione di utilizzare Java all’interno dei vostri progetti, allora Spring porterebbe una semplificazione significativa, potendo di fatto contare su una collezione di formulari flessibili. Con Spring ottenete una struttura di base dalle prestazioni convincenti che necessita di ben poche modifiche, il che vi permette di concentrarvi sullo sviluppo stesso della logica di business. Nel repository ufficiale di GitHub il framework è disponibile per il download, e quindi per un primo test di prova. Qui di seguito elenchiamo nuovamente in maniera chiara e concisa i benefici dell’ambiente di sviluppo Java:
- Si possono utilizzare i POJO per impostare la logica del vostro progetto
- Struttura del codice di base già pronta, che non necessita di grandi modifiche
- Nessun application server necessario
- Unit e Integration test possibili
- Architettura MVC
- Programmazione orientata agli aspetti possibile grazie al linguaggio AspectJ
- Dependency Injection (regolazione della subordinazione esterna)
- Gestione programmatica della transazionalità