Что произойдет, если в 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) поведение зависит от контекста выполнения (например, веб-запроса или сессии).