Что такое аннотация @Component в Spring Framework?

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

Ответ

@Component — это базовая стереотипная аннотация Spring, которая помечает класс как Spring Bean, управляемый IoC-контейнером. Это основа для автоматического сканирования и регистрации компонентов.

Ключевые особенности:

  • Классы с @Component автоматически обнаруживаются при включённом сканировании (@ComponentScan или <context:component-scan>).
  • Spring создаёт и управляет жизненным циклом экземпляров (бинов) этих классов.
  • Является мета-аннотацией для более специализированных стереотипов:
    • @Service — для бизнес-логики.
    • @Repository — для доступа к данным (добавляет трансляцию исключений).
    • @Controller / @RestController — для веб-слоя.

Пример объявления и использования:

@Component // Будет обнаружен и зарегистрирован как бин
public class NotificationService {
    public void send(String message) {
        System.out.println("Sending: " + message);
    }
}

@Service
public class OrderService {
    @Autowired // Spring внедрит зависимость автоматически
    private NotificationService notificationService;

    public void placeOrder() {
        notificationService.send("Order placed");
    }
}

Почему это важно: @Component — фундамент для конфигурации на основе аннотаций, которая заменяет ручное объявление бинов в XML или Java-конфигурации, обеспечивая удобство и снижая количество шаблонного кода.