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 |