Вопрос проверяет понимание различных типов аннотаций Spring для создания бинов и их назначения.
@Bean используется в конфигурационных классах для явного создания бинов, часто для сторонних классов. @Component, @Service, @Repository — это стереотипные аннотации для автоматического сканирования и создания бинов из ваших классов. @Service и @Repository являются специализированными версиями @Component с дополнительной семантикой.
Spring Framework предоставляет несколько способов определения бинов, каждый со своей областью применения.
@Bean аннотация:
Используется в классах, помеченных @Configuration
Позволяет явно определить метод создания бина
Подходит для сторонних классов, которые нельзя пометить аннотациями Spring
Пример:
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
}Стереотипные аннотации (@Component, @Service, @Repository):
Используются для автоматического сканирования компонентов
Применяются непосредственно к классам
Активируются через @ComponentScan
Различия между стереотипными аннотациями:
@Component:
Базовая аннотация для любого Spring-компонента
Универсальное использование
@Service:
Специализация @Component для бизнес-логики
Не несет дополнительной функциональности, но улучшает читаемость
@Repository:
Специализация @Component для доступа к данным
Автоматически преобразует исключения в Spring DataAccessException
Пример использования:
@Service
public class UserService {
// бизнес-логика
}
@Repository
public class UserRepository {
// доступ к данным
}
@Configuration
public class Config {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}Вывод: @Bean используется для явного конфигурирования, в то время как стереотипные аннотации предназначены для автоматического обнаружения компонентов с различной семантикой.