Когда в Spring следует использовать аннотацию @Component?

«Когда в Spring следует использовать аннотацию @Component?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аннотацию @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), но технически также регистрируют бин в контексте. Используйте более конкретную аннотацию, если она подходит по смыслу.