Ответ
Spring Framework организован в виде набора модулей, которые можно использовать независимо. Основные группы:
Ядро и Контейнер (Core Container)
spring-core: Фундаментальные утилиты, поддержка IoC/DI.spring-beans: Реализация BeanFactory — фабрики бинов.spring-context: МодульApplicationContext, поддержка международization, события, способы внедрения (например,@Autowired).spring-expression(SpEL): Язык выражений Spring для запросов и манипуляций графом объектов во время выполнения.
Аспектное программирование (AOP) и Instrumentation
spring-aop: Поддержка аспектно-ориентированного программирования, проксирование.spring-aspects: Интеграция с AspectJ.
Доступ к данным (Data Access/Integration)
spring-jdbc: Упрощенный доступ к JDBC,JdbcTemplate.spring-orm: Интеграция с ORM-фреймворками (Hibernate, JPA).spring-tx: Декларативное и программное управление транзакциями.spring-oxm: Поддержка Object/XML маппинга (Marshalling/Unmarshalling).
Веб (Web)
spring-web: Базовая веб-интеграция, клиенты для HTTP, поддержкаServletAPI. Содержит основу для Spring MVC.spring-webmvc(Spring MVC): Модуль для построения веб-приложений по паттерну Model-View-Controller.spring-websocket: Поддержка WebSocket.spring-webflux: Реактивный стек для построения неблокирующих веб-приложений.
Прочие ключевые модули
spring-test: Поддержка модульного и интеграционного тестирования с помощьюSpringRunnerи аннотаций (@SpringBootTest,@DataJpaTest).spring-messaging: Абстракции для работы с messaging-паттернами, основа дляspring-websocketиspring-integration.
Пример использования модуля spring-webmvc:
@RestController // Из spring-webmvc
@RequestMapping("/api") // Из spring-webmvc
public class UserController {
@Autowired // Из spring-context
private UserService userService;
@GetMapping("/users/{id}") // Из spring-webmvc
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user); // Использует spring-web
}
}
Важно: Современные проекты часто используют Spring Boot, который автоматически настраивает и объединяет необходимые модули на основе зависимостей в pom.xml или build.gradle.