Middle
178
Mi történik, ha megpróbálod többször megszerezni ugyanazt a bean-t az ApplicationContext-ben?
Válasz az MI-től
sobes.tech MI
По умолчанию, если бин определен в 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) поведение зависит от контекста выполнения (например, веб-запроса или сессии).