Ответ
Метод с @Bean должен находиться в классе, помеченном @Configuration (или @Component, но это менее предпочтительно). Spring сканирует такие классы и регистрирует возвращаемый объект как бин в контексте.
Пример объявления:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
Ключевые требования:
- Метод должен быть
public. - Возвращаемый тип — тип регистрируемого бина.
- Имя бина по умолчанию совпадает с именем метода.
- Можно дополнительно настроить бин с помощью аннотаций:
@Scope— для определения области видимости (singleton, prototype и др.).@Lazy— для ленивой инициализации.@Primary— для указания предпочтительного бина при наличии нескольких кандидатов.@Qualifier— для задания имени бина.
Важно: В классах @Configuration вызовы @Bean-методов проксируются Spring, что гарантирует, что бин будет создан один раз (в scope singleton), даже при множественных вызовах метода.