Sobes.tech
Back to questions
Junior — Middle
82

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

Companies where asked
СБЕРСБЕР
FarZoom
Альфа-БанкАльфа-Банк
IT OneIT One
AstonAston

Answer from AI

sobes.tech AI

В Spring @Component и @Bean используются для создания и регистрации бинов, но отличаются по применению и контексту.

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

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

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

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

Пример:

@Component
public class MyService {
    // Spring создаст этот бин автоматически
}

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