С какими модулями и компонентами Spring Framework вы имели опыт работы?

«С какими модулями и компонентами Spring Framework вы имели опыт работы?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные модули Spring:

  • Spring Core: Контейнер инверсии управления (IoC), Dependency Injection (DI), управление бинами (@Component, @Autowired).
  • Spring MVC / Spring Web: Создание веб-приложений и REST API (@RestController, @RequestMapping, DispatcherServlet).
  • Spring Boot: Автоконфигурация, стартеры (spring-boot-starter-*), встроенные серверы (Tomcat), упрощение разработки.
  • Spring Data JPA: Абстракция для работы с репозиториями, автоматическая генерация запросов из имен методов, поддержка @Query.
  • Spring Security: Аутентификация (форма, JWT, OAuth2) и авторизация на основе ролей, защита от CSRF.
  • Spring AOP: Создание аспектов для сквозной логики (логирование, транзакции, кэширование) с использованием @Aspect и advice (@Before, @Around).
  • Spring Batch: Обработка больших объемов данных пакетами (jobs, steps, chunk-oriented processing).

Пример REST-контроллера с Dependency Injection:

@RestController // = @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserController {
    // Внедрение зависимости через конструктор (рекомендуемый способ)
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        // Возвращаем HTTP 200 OK с телом ответа
        return ResponseEntity.ok(user);
    }
}

Дополнительный опыт: Spring Cache (@Cacheable), Spring Test (@SpringBootTest), Spring Cloud (Config Server, Gateway).