L’Archietettura di Spring

Il framework Spring è organizzato in 20 moduli che possono essere raggruppati nuovamente in Core Container, Web, Accesso ai dati/Integrazione, AOP, Aspect, Instrumentation, Messaging e Test, come mostrato nello schema seguente.

Core Container

I moduli Core e Beans forniscono le parti più fondamentali del framework e forniscono le funzionalità IoC e Dependency Injection. Il concetto di base qui è quello di BeanFactory che fornisce un’implementazione sofisticata del pattern factory. Elimina la necessità di implementare programmaticamente i propri oggetti singleton e consente di disaccoppiare la configurazione e le specifiche delle dipendenze dalla logica del programma corrente.

Il modulo Context è realizzato sulle funzionalità fornite dai moduli Core e Beans: fornisce un modo per accedere agli oggetti in modo framework-style in un con modalità che ricorda in qualche modo un registro JNDI. Il modulo Context eredita le sue funzionalità dal modulo Beans e aggiunge il supporto per: l’internazionalizzazione (I18N) (utilizzando ad esempio i bundle di risorse), la propagazione degli eventi, il caricamento delle risorse e la creazione trasparente dei contesti, ad esempio, a partire da un servlet container. Il modulo di contesto contiene anche il supporto per alcune funzionalità di Java EE come EJB, JMX e supporto per la comunicazione remota. L’interfaccia ApplicationContext è il focal point del modulo di contesto che fornisce queste funzionalità.

Il modulo Expression Language fornisce un potente linguaggio di espressione per interrogare e manipolare il grafo degli oggetti a runtime. Può essere visto come un’estensione delllo Unified Expression Language di java come specificato nella specifica JSP 2.1. Il linguaggio supporta l’impostazione il recupero (getting & setting) dei valori di proprietà degli oggetti, assegnazione di proprietà, invocazione di metodi, accesso al contesto di un array, collection e indicizzatori, operatori logici e aritmetici e recupero di oggetti per nome dal container IoC di Spring. Supporta anche la proiezione e la selezione di liste, nonché l’aggregazione di liste.

Spring Web

Il modulo Web di Spring offre funzionalità di integrazione web-oriented di base, come la funzionalità di upload di file multipart, l’inizializzazione del contenitore IoC utilizzando servlet listener e un contesto applicativo web-oriented. Contiene anche le componenti relative al web del supporto remoto offerto da Spring.

Il modulo Web-Servlet fornisce l’implementazione di Spring del pattern Model-View-Controller per le applicazioni Web. Spring MVC framework è un’implementazione MVC completa per la realizzazione di applicazioni Web. Il framework MVC è altamente configurabile tramite interfacce strategiche e supporta numerose tecnologie di visualizzazione, tra cui JSP, Velocity, Tiles, iText e POI. Consente anche la realizzazione di API REST utilizzando esattamente la stessa annotazione utilizzate in web MVC.

Il modulo Web-Portlet fornisce l’implementazione MVC da utilizzare in un ambiente portlet e esegue il mirroring di ciò che viene fornito nel modulo Web-Servlet.

Accesso ai Dati e Integrazione

Il livello Accesso e integrazione dati è costituito dai moduli JDBC, ORM, OXM, JMS e Transaction.

Il modulo JDBC fornisce un livello di astrazione JDBC che elimina la necessità di eseguire noiosi codici JDBC e l’interpretazione dei codici di errore specifici dei diversi tipi di database.

Il modulo ORM fornisce il livelli di integrazione per i principali framework di object-relational mapping, tra cui JPA, JDO, Hibernate e iBatis. Utilizzando il pacchetto ORM è possibile utilizzare tutti gli ORM in combinazione con tutte le altre funzionalità offerte Spring, come la semplice funzione di gestione delle transazioni dichiarative.

Il modulo OXM fornisce un livello di astrazione per l’utilizzo di diverse implementazioni di Object/XML mapper. Le tecnologie supportate includono JAXB, Castor, XMLBeans, JiBX e XStream.

Il modulo JMS fornisce il supporto di Spring per il servizio di messaggistica Java. Contiene funzionalità per la produzione e il consumo di messaggi.

Il modulo Transaction fornisce un modo per la gestione delle transazioni sia programmaticamente che dichiarativamente, non solo per le classi che implementano interfacce specifiche ma per un qualsiasi oggetto POJO.

Spring AOP e Aspect

Il modulo Spring AOP integra le funzionalità di Aspect Oriented Programming direttamente nel framework, consentendoci di definire funzionalità trasversali alla nostra logica di business. Di conseguenza, possiamo facilmente abilitare AOP su qualsiasi oggetto gestito dal contesto di Spring. Il modulo AOP fornisce servizi per la gestione delle transazioni per tutti oggetti di una qualsiasi applicazione basata su Spring.

C’è anche un modulo Aspects separato che fornisce integrazione con AspectJ.

Instrumentation

Il modulo Instrumentation fornisce supporto per la strumentazione di classe e implementazioni di classloader da utilizzare in alcuni server applicativi.

Messaggistica

Il modulo di messaggistica del framework Spring funge da base per le applicazioni basate su messaggistica. Il modulo fornisce un insieme di classi, ad es. Message, MessageChannel, MessageHandler per inviare e ricevere messaggi dall’applicazione e fornisce anche una serie di annotazioni per mappare i messaggi ai metodi, in modo molto simile al modello di programmazione basato sulle annotazioni di Spring MVC.

Testing

Il modulo Test del framework di Spring fornisce astrazione su molti framework di testing e mocking come TestNG, JUnit, Mockito, PowerMock, rendendo molto più semplice la scrittura del codice per l’esecuzione dei test unitari e di integrazione.

Dipendenze

Nella tabella seguente sono riportate le dipendenze per i moduli descritti.

GroupId ArtifactId Description
org.springframework spring-aop Proxy-based AOP support
org.springframework spring-aspects AspectJ based aspects
org.springframework spring-beans Beans support, including Groovy
org.springframework spring-context Application context runtime, including scheduling and remoting abstractions
org.springframework spring-context-support Support classes for integrating common third-party libraries into a Spring application context
org.springframework spring-core Core utilities, used by many other Spring modules
org.springframework spring-expression Spring Expression Language (SpEL)
org.springframework spring-instrument Instrumentation agent for JVM bootstrapping
org.springframework spring-instrument-tomcat Instrumentation agent for Tomcat
org.springframework spring-jdbc JDBC support package, including DataSource setup and JDBC access support
org.springframework spring-jms JMS support package, including helper classes to send/receive JMS messages
org.springframework spring-messaging Support for messaging architectures and protocols
org.springframework spring-orm Object/Relational Mapping, including JPA and Hibernate support
org.springframework spring-oxm Object/XML Mapping
org.springframework spring-test Support for unit testing and integration testing Spring components
org.springframework spring-tx Transaction infrastructure, including DAO support and JCA integration
org.springframework spring-web Foundational web support, including web client and web-based remoting
org.springframework spring-webmvc HTTP-based Model-View-Controller and REST endpoints for Servlet stacks
org.springframework spring-webmvc-portlet MVC implementation to be used in a Portlet environment
org.springframework spring-websocket WebSocket and SockJS infrastructure, including STOMP messaging support

© 2018 Java Boss - Theme by HappyThemes