Sobes.tech
Назад к вопросам
Junior — Middle
45

Можно ли рассматривать класс Controller как бинов в контейнере Spring?

Компании, где спрашивали
eRaga Infosystem

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Да, в Spring Controller обычно является bean’ом, если он создан и управляется контейнером Spring. Это значит, что объект создаётся, настраивается и внедряется самим Spring, а не вручную через new. При этом не любой класс с именем Controller автоматически становится бином — он должен быть зарегистрирован в контексте.

Определение:

Bean в Spring — это объект, жизненным циклом которого управляет контейнер Spring. Контейнер создаёт такой объект, внедряет зависимости и применяет к нему свои механизмы, например AOP или обработку аннотаций.

Controller — это обычный Java-класс, который в веб-приложении Spring используется для обработки HTTP-запросов. Если класс помечен @Controller или @RestController, он обычно попадает в контекст как bean.

Пример использования:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {

    @GetMapping("/users")
    @ResponseBody
    public String users() {
        return "users";
    }
}

В этом примере UserController будет обнаружен Spring при component scanning и зарегистрирован как bean. После этого Spring сможет вызывать его метод для обработки запроса /users.

Пояснение кода:

@Controller сообщает Spring, что этот класс нужно взять под управление контейнера.
При старте приложения Spring сканирует классы, находит UserController и создаёт его экземпляр как bean.
Когда приходит HTTP-запрос на /users, Spring DispatcherServlet находит подходящий handler и вызывает метод users().
Аннотация @ResponseBody говорит, что результат метода нужно вернуть в ответе как текст, а не как имя шаблона.

Ключевые моменты:

  • Controller может быть bean’ом, если он зарегистрирован в Spring-контейнере.
  • @Controller и @RestController обычно означают, что класс управляется Spring.
  • Bean — это не просто объект, а объект под контролем контейнера.
  • Если класс создан вручную через new, это уже не bean Spring.
  • Для MVC-контроллеров bean-статус важен, потому что Spring использует их для маршрутизации запросов и внедрения зависимостей.