На какие основные функциональные модули делится Spring Framework?

Ответ

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, поддержка Servlet API. Содержит основу для 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.