Ответ
Аннотацию @Component используют для пометки любого класса, экземпляры которого должны управляться Spring IoC-контейнером как бины, когда класс не подпадает под более специфичные стереотипы.
Когда выбирать @Component:
- Для технических, кросс-срезных (cross-cutting) компонентов: утилитные классы, хелперы, фабрики, кастомные мапперы.
- Когда класс не имеет четкой принадлежности к слоям сервиса (
@Service), доступа к данным (@Repository) или контроллера (@Controller/@RestController).
Пример:
@Component
public class EmailValidator {
// Этот класс — не сервис бизнес-логики и не репозиторий,
// но он нужен в разных частях приложения и должен внедряться через @Autowired.
public boolean isValid(String email) {
return email != null && email.contains("@");
}
}
// Использование в другом бине:
@Service
public class UserService {
@Autowired
private EmailValidator emailValidator; // Spring внедрит бин, отмеченный @Component
}
Важно: @Service, @Repository, @Controller — это специализированные @Component. Они несут семантическую нагрузку (например, @Repository автоматически трансформирует исключения в DataAccessException), но технически также регистрируют бин в контексте. Используйте более конкретную аннотацию, если она подходит по смыслу.