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

При использовании @RestController создается новый экземпляр сервиса для каждого HTTP-запроса или используется один и тот же объект?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

При использовании аннотации @RestController в Spring Boot сервисы, как правило, являются синглтонами по умолчанию. Это значит, что для каждого HTTP-запроса не создаётся новый экземпляр контроллера или сервиса, а используется один и тот же объект.

Spring управляет жизненным циклом бинов и по умолчанию создает их как синглтоны, что повышает производительность и экономит ресурсы.

Если требуется создать новый экземпляр на каждый запрос, можно изменить область видимости бина, например, с помощью аннотации @Scope("request").

Пример:

@Service
public class MyService {
    // сервис синглтон по умолчанию
}

@RestController
public class MyController {
    private final MyService myService;

    public MyController(MyService myService) {
        this.myService = myService;
    }

    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }
}

Здесь MyService и MyController — синглтоны, один экземпляр на всё приложение.