Какие знания и опыт у вас есть в Spring Framework?

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

Ответ

Spring Core: Понимание Dependency Injection (DI) и Inversion of Control (IoC). Работа с бинами, их скоупами (singleton, prototype, request, session, application), жизненным циклом и SpEL (Spring Expression Language).

Spring MVC: Создание REST-контроллеров (@RestController), маппинг запросов (@RequestMapping, @GetMapping), валидация данных (@Valid), глобальная обработка исключений (@ControllerAdvice).

Spring Boot: Использование автоконфигурации, стартеров (starter dependencies), Spring Boot Actuator для мониторинга, работа с профилями (application-{profile}.properties).

Spring Data JPA: Работа с репозиториями, поддержка кастомных запросов (@Query), использование QueryDSL, управление транзакциями (@Transactional).

Spring Security: Настройка аутентификации (OAuth2, JWT) и авторизации на основе ролей, защита от CSRF.

Spring Cloud (базово): Конфигурация через Config Server, регистрация сервисов (Eureka), устойчивость (Hystrix), декларативные REST-клиенты (Feign).

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

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    // Внедрение зависимости через конструктор (рекомендуемый способ)
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        UserDto user = userService.findById(id);
        return ResponseEntity.ok(user);
    }
}