Rod Johnson, svi­lup­pa­to­re au­stra­lia­no, presentò nel 2002 il codice del framework Java Interface 21 nella sua opera “Expert One-on-One J2EE Design and De­ve­lo­p­ment”, scritto spe­ci­fi­ca­men­te per l’utilizzo nei suoi progetti di allora. Sulla base di questo stesso codice egli sviluppò suc­ces­si­va­men­te, assieme ad altri pro­gram­ma­to­ri, il framework Spring, pub­bli­ca­to per la prima volta nel Giugno 2003 su Sour­ce­For­ge sotto la licenza gratuita Apache 2.0, e che ancora oggi rimane una delle soluzioni più popolari per lo sviluppo di ap­pli­ca­zio­ni aziendali con Java. Da allora il framework open source ha posto rimedio, e continua a farlo, alle debolezze e alle li­mi­ta­zio­ni dell’ambiente di sviluppo J2EE, oggi co­mu­ne­men­te co­no­sciu­to anche come “piat­ta­for­ma Java”, e dei com­po­nen­ti software En­ter­pri­se JavaBeans (EJB), riducendo dunque dra­sti­ca­men­te la loro com­ples­si­tà.

Che cos’è Spring?

Spring sem­pli­fi­ca lo sviluppo delle ap­pli­ca­zio­ni Java, in­di­pen­den­te­men­te che si tratti di una comune ap­pli­ca­zio­ne offline o di un’ap­pli­ca­zio­ne 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 pro­gram­ma­to­re, il framework si basa sui seguenti principi, già il­lu­stra­ti da Rod Johnson nel suo libro:

  • De­pen­den­cy Injection (DI): nel campo della pro­gram­ma­zio­ne orientata agli oggetti si intende per De­pen­den­cy Injection un’istanza esterna che regola pre­ven­ti­va­men­te le su­bor­di­na­zio­ni degli oggetti. Spring utilizza a questo scopo delle com­po­nen­ti Java JavaBeans. Tra le altre cose esse fungono in Java come container della tra­smis­sio­ne dei dati, perciò servono da for­mu­la­rio per tutte le risorse gestite all’interno del framework Spring, risorse anche riferite come Beans. In questo modo Spring agisce da container, mettendo a di­spo­si­zio­ne del vostro progetto svi­lup­pa­to con Java le classi pre­con­fi­gu­ra­te, con incluse le relative su­bor­di­na­zio­ni.
  • Pro­gram­ma­zio­ne orientata agli aspetti (AOP): per aumentare ul­te­rior­men­te la mo­du­la­ri­tà delle ap­pli­ca­zio­ni orientate agli oggetti, Spring offre op­zio­nal­men­te anche un approccio alla pro­gram­ma­zio­ne orientata agli aspetti con il lin­guag­gio AspectJ. In tal modo gli aspetti ine­vi­ta­bi­li all’interno dei sistemi complessi possono essere strut­tu­ra­ti sin­tat­ti­ca­men­te; inclusi anche quegli aspetti che mettono in con­nes­sio­ne più com­po­nen­ti. Questo porta con sé il vantaggio che il codice di pro­gram­ma­zio­ne viene separato dai processi tecnici come la gestione degli errori, la va­li­da­zio­ne o la sicurezza.
  • Template: come template in Spring vengono definite classi per diverse le in­ter­fac­ce di pro­gram­ma­zio­ne di un’ap­pli­ca­zio­ne, sem­pli­fi­can­do così il lavoro con le API; in quanto esse offrono una gestione au­to­ma­ti­ca delle risorse, una gestione unitaria degli errori e altri van­tag­gio­si aiuti.

Seguendo i principi appena men­zio­na­ti, il framework Spring permette di fare af­fi­da­men­to sulle Plain Old Java Object, o in breve POJO, durante lo sviluppo di ap­pli­ca­zio­ni aziendali con Java. Dif­fe­ren­te­men­te dal con­tro­pro­get­to En­ter­pri­se JavaBeans (EJB), queste possono essere uti­liz­za­te in ogni ambiente e non ne­ces­si­ta­no perciò di alcun ap­pli­ca­tion server specifico che supporti il container di EJB: soluzioni come Tomcat sono del tutto suf­fi­cien­ti. Inoltre per poter uti­liz­za­re Spring avete bisogno del Java SE De­ve­lo­p­ment Kit (SDK).

Spring: in­tro­du­zio­ne ai moduli prin­ci­pa­li

Spring è un’ottima scelta per gli utilizzi più disparati, e ciò lo si deve alla sua struttura modulare. Svi­lup­pan­do il vostro progetto con Spring avrete a di­spo­si­zio­ne circa venti moduli e la pos­si­bi­li­tà di scegliere quali di questi facciano al caso vostro e quali no. Nell’ar­chi­tet­tu­ra standard del framework i vari moduli sono suddivisi tra le seguenti sei macro categorie:

  • Core Container: Il Core Container contiene i moduli ele­men­ta­ri quali sprin-core, spring-beans, spring-context, spring-context-support e spring-ex­pres­sion. Core e Beans formano la struttura di base del framework e con­ten­go­no ad esempio la funzione De­pen­den­cy Injection e il supporto per le POJO. Il modulo Context eredita le sue ca­rat­te­ri­sti­che dal modulo Beans ed aggiunge all’ap­pli­ca­zio­ne funzioni come possono essere l’in­ter­na­zio­na­liz­za­zio­ne o il ca­ri­ca­men­to delle risorse. In aggiunta esso supporta le funzioni di Java En­ter­pri­se come EJB e JMX (Java Ma­na­ge­ment Ex­ten­sions). Grazie a Context-Support le librerie di terzi possono essere importate in Spring. Spring-ex­pres­sion contiene Spring Ex­pres­sion Language (SPeL), una esten­sio­ne di Unified Ex­pres­sion Language, specifica di JSP 2.1 (Ja­va­Ser­ver Pages).
  • AOP e In­stru­men­ta­tion: per rendere possibile la pro­gram­ma­zio­ne orientata agli aspetti, il framework Spring contiene i moduli spring-aop e spring-aspects per l’in­te­gra­zio­ne del già accennato lin­guag­gio AspectJ. Le com­po­nen­ti di spring-in­stru­ment per­met­to­no di stru­men­ta­liz­za­re le classi Java, ovvero di apportare modifiche a runtime a Bytecode, e aggiunge tra l’altro le im­ple­men­ta­zio­ni Clas­sLoa­der per diversi ap­pli­ca­tion server.
  • Messaging: Spring dispone di alcune funzioni chiave del progetto Spring In­te­gra­tion per poter fungere da punto di partenza per le ap­pli­ca­zio­ni basate su messaggio; tali funzioni sono ad esempio “Message”, “Mes­sa­ge­Chan­nel” o “Mes­sa­ge­Hand­ler”. Il modulo cor­ri­spon­den­te porta il nome di spring-messaging.
  • Data Access/In­te­gra­tion: i formulari di queste categorie servono a garantire alle ap­pli­ca­zio­ni Java le capacità ne­ces­sa­rie per l’in­te­ra­zio­ne con altre ap­pli­ca­zio­ni e a regolare l’accesso ai dati. Il for­mu­la­rio spring-jdbc, ad esempio, mette a di­spo­si­zio­ne uno strato di astra­zio­ne, il quale definisce il modo in cui un client accede alla banca dati, rendendo vana la scomoda codifica JDBC ti­pi­ca­men­te usata. Spring-orm contiene invece gli strati d’in­te­gra­zio­ne per le popolari in­ter­fac­ce ORM, con le quali è possibile servirsi dei database re­la­zio­na­li. Le altre com­po­nen­ti sono spring-tx, che supporta la gestione pro­gram­ma­ti­ca delle tran­sa­zio­ni per tutte le classi e per tutti i POJO, spring-oxm, con­te­nen­te lo strato di astra­zio­ne per l’Object Mapping e per il XML Mapping, e spring-jms, un for­mu­la­rio con le ca­rat­te­ri­sti­che per la pro­du­zio­ne e l’ela­bo­ra­zio­ne di messaggi.
  • Web: in questa categoria si trovano i formulari specifici per le ap­pli­ca­zio­ni web, ovvero spring-web, spring-webmvc e spring-websocket. La prima aggiunge all’ap­pli­ca­zio­ne Java le tipiche ca­rat­te­ri­sti­che In­te­gra­tion orientate al web, come ad esempio la funzione di upload per i dati divisi in più parti (funzione multipart) o un client HTTP. Il for­mu­la­rio spring-webmvc viene anch’essa definita come web Servlet e contiene le im­ple­men­ta­zio­ni di Spring per la rea­liz­za­zio­ne dell’ar­chi­tet­tu­ra di default Model-View-Con­trol­ler e dei REST web services. Spring-websocket permette la tra­smis­sio­ne dei dati tra client e server sulla base di Web­Soc­ke­ts.
  • Test: il for­mu­la­rio spring-test permette di ve­ri­fi­ca­re la fun­zio­na­li­tà delle com­po­nen­ti della vostra ap­pli­ca­zio­ne Java. Tramite di esso infatti potete sot­to­por­re tali com­po­nen­ti con i relativi framework ag­giun­ti­vi, quali JUnit o TestNG, ad un’analisi esaustiva tramite i test Unit, con focus su una singola com­po­nen­te, così come i test In­te­gra­tions, con focus su più com­po­nen­ti messe in relazione tra loro.

Spring: Java nel moderno sviluppo web

Sin da principio, Java e le tec­no­lo­gie ad esso collegate erano state pensate per l’utilizzo nello sviluppo web. Tuttavia, dopo le dif­fi­col­tà iniziali dovute al poco supporto ricevuto dai browser dell’epoca, alla larghezza di banda ridotta delle con­nes­sio­ni Internet private e all’in­suf­fi­cien­te capacità di calcolo dei PC del tempo, il lin­guag­gio di pro­gram­ma­zio­ne subì un forte con­trac­col­po alla fine degli anni ’90. Cio­no­no­stan­te agli inizi del World Wide Web le Java Applets erano ancora popolari.

Per Java Applets si intendono le ap­pli­ca­zio­ni scritte in Java che grazie all’ambiente di runtime venivano eseguite nel browser ed erano in grado di in­te­ra­gi­re con l’utente, senza tra l’altro dover inviare dati al server. Ma a causa della mole di risorse ne­ces­sa­rie, esse ri­sul­ta­va­no poco pratiche. Con l’ascesa dei di­spo­si­ti­vi mobili, il cui browser non supporta le Applets, gli elementi web in­te­rat­ti­vi sono stati spazzati via com­ple­ta­men­te.

Sebbene Java si sia presto rivelata essere un flop come frontend, il lin­guag­gio di pro­gram­ma­zio­ne è tuttavia riuscito ad af­fer­mar­si 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 Midd­leware, software per le banche o grandi sistemi di Content Ma­na­ge­ment. Og­gi­gior­no le tec­no­lo­gie 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 lin­guag­gio di scripting PHP.

Per gli svi­lup­pa­to­ri web, i quali tuttavia lavorano con Java, Spring offre sia la struttura ne­ces­sa­ria che anche una sem­pli­fi­ca­zio­ne notevole del processo di lavoro. I benefici che porta l’affidarsi a Java per lo sviluppo delle proprie ap­pli­ca­zio­ni web sono tra gli altri il fatto di essere un lin­guag­gio mul­ti­piat­ta­for­ma e la capacità di in­te­gra­zio­ne 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 so­li­ta­men­te definito anche come Light­weight Framework per ap­pli­ca­zio­ni Java, ovvero un framework leggero; questo perché non sono necessari adat­ta­men­ti di alcun tipo al codice sorgente per poter ap­pro­fit­ta­re dei numerosi vantaggi che esso ha da offrire. Tra le altre cose va anche con­si­de­ra­ta la rea­liz­za­zio­ne della gestione della tran­sa­zio­na­li­tà, delle in­ter­fac­ce e dell’accesso alla banca dati. La pos­si­bi­li­tà di condurre dei test sulle varie unità e sull’in­te­gra­zio­ne è un ulteriore motivo della po­po­la­ri­tà del framework Spring. Tuttavia il merito maggior di Spring è senza dubbio l’abbandono dei com­po­nen­ti non stan­dar­diz­za­ti e specifici per le singole piat­ta­for­me, rinuncia che lo rende di diritto un framework portatile e in­di­pen­den­te dagli ap­pli­ca­tion server. Per questo motivo lo si può infatti uti­liz­za­re senza problemi come meta framework, in quanto possono essere integrate altri com­po­nen­ti esterni o ad­di­rit­tu­ra interi framework ag­giun­ti­vi. Un tipico esempio di utilizzo è lo sviluppo di un backend tramite Spring, il quale verrà suc­ces­si­va­men­te collegato ad un frontend, e che per la creazione del quale prima bisognava fare af­fi­da­men­to ad un framework UI come ad esempio Twitter Bootstrap. Spring dà il meglio di sé quando viene uti­liz­za­to per la creazione di ap­pli­ca­zio­ni 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 im­ple­men­ta­re le tec­no­lo­gie ne­ces­sa­rie. Di­ver­sa­men­te dai framework web puri, come ad esempio il progetto con­cor­ren­te Struts di Apache, Spring non è limitato ad essere una ap­pli­ca­zio­ne web, piuttosto esso permette lo sviluppo di soluzioni native per desktop. Per ap­pli­ca­zio­ni semplici invece, che siano online o offline, Java e Spring sono tuttavia meno adatti. Cio­no­no­stan­te rimane il fatto che la creazione di tali progetti risulti comunque possibile.

Pa­no­ra­mi­ca sui vantaggi di Spring

Se vi state ap­pre­stan­do ad iniziare lo sviluppo del vostro prossimo grande progetto e siete alla ricerca di un framework adatto, dovreste prendere se­ria­men­te in con­si­de­ra­zio­ne il framework Spring. In par­ti­co­la­re se avete comunque in­ten­zio­ne di uti­liz­za­re Java all’interno dei vostri progetti, allora Spring por­te­reb­be una sem­pli­fi­ca­zio­ne si­gni­fi­ca­ti­va, potendo di fatto contare su una col­le­zio­ne di formulari fles­si­bi­li. Con Spring ottenete una struttura di base dalle pre­sta­zio­ni con­vin­cen­ti che necessita di ben poche modifiche, il che vi permette di con­cen­trar­vi sullo sviluppo stesso della logica di business. Nel re­po­si­to­ry ufficiale di GitHub il framework è di­spo­ni­bi­le per il download, e quindi per un primo test di prova. Qui di seguito elen­chia­mo nuo­va­men­te in maniera chiara e concisa i benefici dell’ambiente di sviluppo Java:

  • Si possono uti­liz­za­re i POJO per impostare la logica del vostro progetto
  • Struttura del codice di base già pronta, che non necessita di grandi modifiche
  • Nessun ap­pli­ca­tion server ne­ces­sa­rio
  • Unit e In­te­gra­tion test possibili
  • Ar­chi­tet­tu­ra MVC
  • Pro­gram­ma­zio­ne orientata agli aspetti possibile grazie al lin­guag­gio AspectJ
  • De­pen­den­cy Injection (re­go­la­zio­ne della su­bor­di­na­zio­ne esterna)
  • Gestione pro­gram­ma­ti­ca della tran­sa­zio­na­li­tà
Vai al menu prin­ci­pa­le