Sobes.tech
Назад к вопросам
Senior
6

Чем отличается аннотация @Bean от @Component? Когда использовать одну, а когда другую?

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

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

sobes.tech AI

@Component и @Bean — это аннотации в Spring для определения бинов, но используются по-разному:

  • @Component — ставится над классом, чтобы Spring автоматически обнаружил и зарегистрировал этот класс как бин при сканировании компонентов (component scanning). Это удобно для простых случаев, когда бин — это класс с аннотацией.

  • @Bean — ставится над методом в классе с аннотацией @Configuration. Метод возвращает объект, который Spring зарегистрирует как бин. Используется, когда нужно создавать бин вручную, например, с кастомной логикой или из сторонних библиотек.

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

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

Пример:

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

@Configuration
public class AppConfig {
    @Bean
    public ExternalService externalService() {
        return new ExternalService("param");
    }
}