Что такое аннотации в Java и для чего они применяются?

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

Ответ

Аннотации — это форма метаданных, которые добавляются к исходному коду (классам, методам, полям, параметрам). Они не изменяют семантику программы напрямую, но предоставляют информацию для:

  • Компилятора (для проверок или генерации кода).
  • Среды выполнения (JVM) через механизм рефлексии.
  • Различных инструментов и фреймворков (для конфигурации, генерации кода, обработки).

Основные цели применения:

  1. Информация для компилятора:

    • @Override — проверяет переопределение метода.
    • @Deprecated — помечает устаревший элемент.
    • @SuppressWarnings — отключает предупреждения.
    @Override
    public String toString() {
        return "Custom Object";
    }
  2. Конфигурация в фреймворках (Runtime-обработка):

    • Spring: @Component, @Autowired, @RequestMapping.
    • Hibernate/JPA: @Entity, @Id, @Column.
    • JUnit: @Test, @BeforeEach.
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "user_name")
        private String name;
    }
  3. Обработка на этапе компиляции (Annotation Processing): Генерация дополнительного кода (например, @Getter, @Setter из Project Lombok).

Аннотации делают код декларативным, сокращают объем XML-конфигураций и повышают удобство сопровождения.