Sobes.tech
Назад к вопросам
Junior — Middle
68

Какое отличие между аннотациями @Bean и @Component в Spring, и в каких случаях их следует использовать?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Аннотация @Component используется для автоматического обнаружения и регистрации класса как Spring-бина через сканирование компонентов (component scanning). Она применяется непосредственно над классом, который должен стать бином.

Аннотация @Bean применяется над методом внутри класса, помеченного как конфигурационный (@Configuration). Этот метод возвращает объект, который Spring зарегистрирует как бин.

Основные отличия:

  • @Component — для классов, автоматически обнаруживаемых через сканирование.
  • @Bean — для создания бина вручную в конфигурационном классе.

Когда использовать:

  • @Component — когда класс сам по себе является компонентом и может быть автоматически найден.
  • @Bean — когда нужно создать бин из стороннего класса или когда требуется более сложная логика создания объекта.

Пример:

@Component
public class MyService {
    // ...
}

@Configuration
public class AppConfig {
    @Bean
    public MyRepository myRepository() {
        return new MyRepository();
    }
}