Зачем в Spring аннотация @Component применяется к классу?

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

Ответ

Аннотация @Component помечает класс как компонент Spring, который будет автоматически обнаружен и зарегистрирован в контексте приложения как бин при включенном сканировании (@ComponentScan).

Почему именно класс?

  • Spring работает с объектами (бина́ми), которые являются экземплярами классов. Аннотация указывает фреймворку, что данный класс нужно инстанциировать и управлять его жизненным циклом.
  • Это основа для более специализированных стереотипных аннотаций: @Service, @Repository, @Controller/@RestController.
  • Позволяет использовать внедрение зависимостей (например, через @Autowired) в этот класс и из него.

Пример:

@Component
public class NotificationService {
    public void send(String message) {
        System.out.println("Sending: " + message);
    }
}

Теперь NotificationService можно инжектировать в другие бины:

@Service
public class UserService {
    @Autowired
    private NotificationService notificationService;
}