Является ли класс, аннотированный @Controller, Spring-бином?

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

Ответ

Да, класс, помеченный аннотацией @Controller (или @RestController), является Spring-бином. Аннотация @Controller — это стереотипная аннотация, помеченная как @Component, поэтому она автоматически обнаруживается при сканировании компонентов и регистрируется в контексте приложения Spring IoC.

Почему это бин:

  • Управляется контейнером Spring (создание, внедрение зависимостей, lifecycle).
  • Может использовать @Autowired для инъекции зависимостей.
  • Может быть целью для Spring AOP (например, для @ExceptionHandler, @ModelAttribute).

Пример:

@Controller
@RequestMapping("/api")
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));
    }
}