The modularity of Spring Framework is one of the most important reasons for its widespread used. Spring Framework is highly modular with more than 20 different modules--having clearly defined boundaries.
The following figure shows different Spring modules--organized by the layer of application they are typically used in:
We will start with discussing the Spring Core Container before moving on to other modules grouped by the application layer they are typically used in.
Spring Core Container provides the core features of Spring Framework--dependency injection, IoC (Inversion of Control) container, and the application context. We will learn more about DI and IoC Container in Chapter 2, Dependency Injection.
Important core Spring modules are listed in the following table:
Module/Artifact | Use |
spring-core | Utilities used by other Spring modules. |
spring-beans | Support for Spring beans. In combination with spring-core provides the core feature of Spring Framework--dependency injection. Includes implementation of BeanFactory. |
spring-context | Implements ApplicationContext, which extends BeanFactory and provides support to load resources and internationalization, among others. |
spring-expression | Extends EL (Expression Language from JSP) and provides a language for bean property (including arrays and collections) access and manipulations. |
Cross-cutting concerns are applicable to all application layers--logging and security, among others. AOP is typically used to implement cross-cutting concerns.
Unit tests and integration tests fit this category since they are applicable to all layers.
Important Spring modules related to cross-cutting concerns are listed as follows:
Module/Artifact | Use |
spring-aop | Provides basic support for Aspect-Oriented Programming--with method interceptors and pointcuts. |
spring-aspects | Provides integration with the most popular and fully featured AOP framework, AspectJ. |
spring-instrument | Provides basic instrumentation support. |
spring-test | Provides basic support for unit testing and integration testing. |
Spring provides its own MVC framework, Spring MVC, other than providing great integration with popular web frameworks such as Struts.
Important artifacts/modules are listed as follows:
- spring-web: Provides basic web features, such as multi-part file upload. Provides support for integration with other web frameworks, such as Struts.
- spring-webmvc: Provides a fully featured web MVC framework--Spring MVC, which includes features to implement REST services as well.
We will cover Spring MVC and develop web applicaitions and rest services with it in Chapter 3, Building Web Application with Spring MVC and Chapter 5, Building Microservices with Spring Boot.
The business layer is focused on executing the business logic of the applications. With Spring, business logic is typically implemented in Plain Old Java Object (POJO).
Spring Transactions (spring-tx) provides declarative transaction management for POJO and other classes.
The data layer in applications typically talks to the database and/or the external interfaces. Some of the important Spring modules related to the data layer are listed in the following table:
Module/Artifact | Use |
---|---|
spring-jdbc | Provides abstraction around JDBC to avoid boilerplate code. |
spring-orm | Provides integration with ORM frameworks and specifications-- JPA and Hibernate, among others. |
spring-oxm | Provides an object to XML mapping integration. Supports frameworks such as JAXB, Castor, and so on. |
spring-jms | Provides abstraction around JMS to avoid boilerplate code. |