Ответ
Да, контроллер в 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" (по соглашению об именовании).