ENIGMA AI
ENIGMA AI
Java Средний

В чём разница между аннотациями @Bean и @Component?

@Bean vs @Component в Spring

@Component

Где: На классе
Механизм: Component Scanning

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

@Bean

Где: На методе в @Configuration классе
Механизм: Явное объявление

@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}

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

Сценарий Аннотация
Ваши классы @Component
Сторонние библиотеки @Bean
Условная логика создания @Bean
Простые сервисы @Component

Примеры @Bean:

@Configuration
public class DataSourceConfig {

    // Сторонний класс
    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:postgresql://...");
        return ds;
    }

    // Условное создание
    @Bean
    @ConditionalOnProperty(name = "cache.enabled")
    public CacheManager cacheManager() {
        return new CaffeineCacheManager();
    }

    // Зависимости между бинами
    @Bean
    public UserRepository userRepository(DataSource ds) {
        return new JdbcUserRepository(ds);
    }
}

Специализации @Component:

@Controller   // Web контроллер
@Service      // Бизнес-логика
@Repository   // Доступ к данным
@Configuration // Конфигурация

Ключевые отличия:

Аспект @Component @Bean
Уровень Класс Метод
Контроль создания Автоматический Полный
Сторонние классы Нет Да
Параметризация Через конструктор Через метод

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы