Uno dei principali vantaggi offerti da Spring è quello di poter escludere le parti del framework non necessarie all'applicazione che si sta sviluppando, includendo esclusivamente quelle utili. Questo è possibile grazie all'architettura modulare di Spring che è composta principalmente da cinque livelli.
Core Container
Rappresenta la parte principale di Spring e sopra di esso è costruito l'intero framework. I moduli di Core e Beans sono responsabili delle funzionalità di Inversion Of Control (IoC) e Dependency Injection ed hanno come compito principale la creazione, gestione e manipolazione di oggetti di qualsiasi natura che, in Spring, vengono detti beans.
Il modulo context estende i servizi basilari del Core aggiungendo le funzionalità tipiche di un moderno framework. Tra queste troviamo JNDI, EJB, JMX, internazionalizzazione(I18N) e supporto agli eventi.
Infine il modulo Expression Language fornisce un potente linguaggio per interrogare e modificare oggetti a runtime.
Data Access/Integration
Fornisce un livello di astrazione per l'accesso ai dati mediante tecnologie eterogenee tra loro come ad esempio JDBC, Hibernate o JDO. Questo modulo tende a nascondere la complessità delle API di accesso ai dati, semplificando ed uniformando quelle che sono le problematiche legate alla gestione delle connessioni, delle transazioni e delle eccezzioni.
Notevole attenzione è stata data all'integrazione del framewrok con i principali ORM in circolazione compresi JPA, JDO, Hibernate, e iBatis. Oltre a questo il Data Access si occupa di fornire supporto per il Java Message Service e per svariate implementazioni di Object/XML Mapper come JAXB, Castor e XMLBean.
Spring AOP
Aggiunge al framework la funzionalità della programmazzione Aspect Oriented. AOP offre un nuovo modo di programmare che come vedremo in seguito porterà notevoli vantaggi in tutte quelle operazioni che sono trasversali tra più oggetti. In Spring l'utilizzo di AOP offre il meglio di sé nella gestione delle transazioni, permettendo di evitare l'utilizzo degli EJB per tale scopo.
Web
Come si intuisce dal nome, questo livello è responsabile delle caratteristiche Web del framework. Oltre alle funzionalità basilari, per la creazione di applicazioni Web, questo livello mette a disposizione un'implementazione del pattern MVC realizzando lo Spring MVC Framework (moduli Web-Servlet
e Web-Portlet
).
Il framework MVC è ampiamente configurabile attraverso delle Strategy, può operare sia in contesti servlet che portlet e può essere utilizzato con numerose tecnologie di view comprese JSP e Velocity.
Testing
Un'altra delle caratteristiche per il quale Spring si contraddistingue è il supporto al testing. Questo livello mette a disposizione un ambiente molto potente per il test delle componenti Spring, grazie anche alla sua integrazione con JUnit e TestNG e alla presenza di Mock objects per il testing del codice in isolamento.