Мені цікаво, як впорскування пружини обробляє викличні методи з @Bean
анотацією. Якщо я ставлю @Bean
анотацію до методу і повертаю екземпляр, я розумію, що це говорить весни створити компонент, викликаючи метод і отримуючи повернутий екземпляр. Однак іноді цей боб доводиться використовувати для підключення інших бобових компонентів або налаштування іншого коду. Звичайний спосіб це зробити - викликати @Bean
анотований метод, щоб отримати екземпляр. Моє запитання полягає в тому, чому це не призводить до того, що навколо буває кілька випадків квасолі?
Наприклад, див. Код нижче (взято з іншого запитання). entryPoint()
Метод з анотацією @Bean
, так що я б собі уявити , весна буде створити новий екземпляр в BasicAuthenticationEntryPoint
якості компонента. Потім ми entryPoint()
знову телефонуємо в блоці configure, але, схоже, entryPoint()
повертає екземпляр bean і не викликається кілька разів (я спробував ввійти в журнал і отримав лише один запис у журналі). Потенційно ми могли б телефонувати entryPoint()
кілька разів в інших частинах конфігурації, і ми завжди отримували б той самий екземпляр. Чи правильно я розумію це? Чи робить весна якесь магічне переписування методів, анотованих @Bean
?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
і@Primary
).