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 — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно