Как правильно объявить метод с аннотацией @Bean, чтобы Spring его зарегистрировал?

«Как правильно объявить метод с аннотацией @Bean, чтобы Spring его зарегистрировал?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод с @Bean должен находиться в классе, помеченном @Configuration (или @Component, но это менее предпочтительно). Spring сканирует такие классы и регистрирует возвращаемый объект как бин в контексте.

Пример объявления:

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

Ключевые требования:

  1. Метод должен быть public.
  2. Возвращаемый тип — тип регистрируемого бина.
  3. Имя бина по умолчанию совпадает с именем метода.
  4. Можно дополнительно настроить бин с помощью аннотаций:
    • @Scope — для определения области видимости (singleton, prototype и др.).
    • @Lazy — для ленивой инициализации.
    • @Primary — для указания предпочтительного бина при наличии нескольких кандидатов.
    • @Qualifier — для задания имени бина.

Важно: В классах @Configuration вызовы @Bean-методов проксируются Spring, что гарантирует, что бин будет создан один раз (в scope singleton), даже при множественных вызовах метода.