Ответ
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.
Ответ 18+ 🔞
Да ты посмотри на эту конструкцию, блядь! Spring Framework — это ж не монолит какой-то, а как конструктор, ёпта. Взял что надо — поставил. Не надо — не хуя не тащи. И всё разложено по полочкам, чтоб не рыться, как свинья в апельсинах.
Вот смотри, основные банды модулей:
Ядро и Контейнер (Core Container) — это основа основ, без этого нихуя
spring-core: Ну, это как фундамент, блядь. Базовые плюшки и главная фишка — IoC/DI. То есть, не ты объекты создаёшь, а тебе их, сука, подкладывают, где надо.spring-beans: А это фабрика, где эти самые бины (объекты) штампуются. BeanFactory, блядь. Конвейер.spring-context: Это уже продвинутая версия контекста,ApplicationContext. Тут и события всякие, и интернационализация, и волшебное внедрение через@Autowired— аннотацию, от которой у новичков волосы дыбом.spring-expression(SpEL): Язык выражений, чтоб на лету, блядь, с объектами шаманить. Типа#{user.name.toUpperCase()}. Мощная штука, но если неаккуратно — себе же хуже сделаешь.
Аспектное программирование (AOP) и Instrumentation
spring-aop: Вот это магия, ёбта! Хочешь логирование или транзакции навесить на все методы разом, не ковыряя каждый? Это сюда. Прокси, блядь, прокси вокруг твоих бинов.spring-aspects: Если родного AOP мало — подключаем тяжёлую артиллерию, AspectJ. Теперь можно вообще везде и всюду.
Доступ к данным (Data Access/Integration) — тут с базами работаем
spring-jdbc: Чтоб не писать этот адскийtry-catch-finallyсConnectionиPreparedStatement.JdbcTemplate— спасение, в рот меня чих-пых!spring-orm: Хочешь с Hibernate или JPA работать? Этот модуль поможет им с Spring подружиться.spring-tx: Управление транзакциями. Аннотацию@Transactionalповесил — и всё, блядь, само откатится, если что. Красота.spring-oxm: XML'и и объекты. Marshalling, Unmarshalling. Нужно нечасто, но если надо — оно тут есть.
Веб (Web) — для тех, кто в браузере сидит
spring-web: База для веба. Клиенты HTTP, работа сServletAPI. Основа, на которой MVC стоит.spring-webmvc(Spring MVC): Царь и бог веб-слоя по старинке. Контроллеры,@RequestMapping, вся эта классика.spring-websocket: Для реального времени, чтоб без этих дурацких опросов каждую секунду.spring-webflux: Новый, реактивный закос. Неблокирующий, асинхронный. Для масштаба, но мозг выносит конкретно.
Прочие ключевые модули — без них тоже никуда
spring-test: Тестирование, блядь! Без него как без рук.@SpringBootTest,@DataJpaTest— аннотации, которые поднимают кусок контекста специально для тестов. Не надо городить огород.spring-messaging: Абстракции для обмена сообщениями. Основа для других модулей.
Вот, смотри, как это в коде сходится, на примере spring-webmvc:
@RestController // Это из spring-webmvc, чувак
@RequestMapping("/api") // И это тоже
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); // А ResponseEntity — это из spring-web
}
}
И главное, запомни: щас все умные используют Spring Boot. Это такой волшебный пендель, который смотрит на твой pom.xml или build.gradle, видит, что ты добавил spring-boot-starter-web, и сам, блядь, подтягивает spring-webmvc, spring-web и ещё овердохуища нужных зависимостей, конфигурирует их за тебя. Сидишь и кодишь, а не борешься с XML-конфигами, как в старые добрые времена. Прогресс, ёпта!