Skip to content

Latest commit

 

History

History
70 lines (51 loc) · 3.22 KB

Annotations.md

File metadata and controls

70 lines (51 loc) · 3.22 KB

Конфигурация Spring приложения. XML + Аннотации

Содержание


Аннотации

<context:component-scan base-package="название пакета с классами для бинов"/>

Аннотации - специальный тип комментариев, с помощью которых можно

  • передавать инструкции для Java-компилятора (Например, @Override)
  • передавать инструкции для анализаторов исхдного кода
  • передавать метаданные, которые могут быть использованы либо Java приложением (с помощью рефлексии), либо другими приложениями или фреймворками (Например, Spring)

Преимущества аннотаций: короче и удобнее, чем XML конфигурация, код становится более читабельным.

@Component - пометка на создание бина из класса


Внедрение зависимостей с помощью аннотаций

Класс, в который нужно внедрить зависимость помечается аннотацией @Autowired (подбирает бины по типу (класс или интерфейс)).

Принцип работы:

  1. Spring сканирует все классы с аннотацией @Component и создает бины
  2. Spring сканирует все бины и проверяет, подходит ли хотя бы один бин в качестве зависимости там, где есть аннотация @Autowired
  3. Если находится подходящий бин, он внедряется в качестве зависимости. Не находится - ошибка. Подходят несколько - неоднозначность

Аннотацию @Autowired можно использовать на полях, сеттерах и конструкторах. Причем @Autowired внедрит зависимость в приватное поле, даже если нет конструктора или сеттера. Делает это она с помощью рефлексии (Java Reflection API)

@Qualifier(id)

Уточняет id бина для внедрения

    @Autowired
    public MusicPlayer(@Qualifier("rockMusic") Music music1, @Qualifier("classicalMusic") Music music2) {
        this.music1 = music1;
        this.music2 = music2;
    }

@Value

  1. Создание файла .properties
  2. <context:property-placeholder location="classpath:имяФайла.properties/>"
  3. @Value("${musicPlayer.name}")
    private String name;
    @Value("${musicPlayer.volume}")
    private int volume;

@PostConstruct - аннотация init-методов

@PreDestroy - аннотация destroy-методов