Является ли контроллер в Spring бином?

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

Ответ

Да, контроллер в Spring является бином. Классы, помеченные аннотациями @Controller или @RestController, являются специализированными стереотипными аннотациями, производными от @Component. Spring IoC-контейнер автоматически обнаруживает и регистрирует их как бины в контексте приложения во время сканирования компонентов.

Почему это важно:

  • Бин-контроллер управляется контейнером Spring (инверсия управления).
  • Внедрение зависимостей (@Autowired) в контроллер работает, так как он является бином.
  • Доступны все возможности Spring AOP (аспекты, транзакции и т.д.).

Пример:

@RestController // Специализация @Component для веб-слоя
public class UserController {
    private final UserService userService;

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

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

Класс UserController будет зарегистрирован как бин с именем "userController" (по соглашению об именовании).