Назад к вопросам
Middle
71
questionbank

Что произойдет, если в ApplicationContext попытаться получить один и тот же бин несколько раз?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

По умолчанию, если бин определен в ApplicationContext как синглетон (что является дефолтным scope), при каждом вызове метода getBean() для этого бина будет возвращаться один и тот же экземпляр объекта. Spring сам управляет жизненным циклом синглтон-бинов, создавая их один раз и кэшируя.

Если же бин определен с другим scope, например, prototype, то каждый вызов getBean() будет возвращать новый экземпляр объекта.

Проверка scope можно сделать так:

// Получаем ApplicationContext (например, из SpringApplication.run())
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// Получаем бин MyService (предполагаем, что он определен)
MyService service1 = context.getBean(MyService.class);
MyService service2 = context.getBean(MyService.class);

// Сравниваем ссылки
System.out.println(service1 == service2);

Если MyService имеет scope singleton, вывод будет true. Если prototype, вывод будет false.

В случае других scopes (request, session, application, websocket) поведение зависит от контекста выполнения (например, веб-запроса или сессии).