<context:component-scan base-package="название пакета с классами для бинов"/>
Аннотации - специальный тип комментариев, с помощью которых можно
- передавать инструкции для Java-компилятора (Например,
@Override
) - передавать инструкции для анализаторов исхдного кода
- передавать метаданные, которые могут быть использованы либо Java приложением (с помощью рефлексии), либо другими приложениями или фреймворками (Например, Spring)
Преимущества аннотаций: короче и удобнее, чем XML конфигурация, код становится более читабельным.
@Component
- пометка на создание бина из класса
Класс, в который нужно внедрить зависимость помечается аннотацией @Autowired
(подбирает бины по
типу (класс или интерфейс)).
Принцип работы:
- Spring сканирует все классы с аннотацией
@Component
и создает бины - Spring сканирует все бины и проверяет, подходит ли хотя бы один бин в качестве зависимости там,
где есть аннотация
@Autowired
- Если находится подходящий бин, он внедряется в качестве зависимости. Не находится - ошибка. Подходят несколько - неоднозначность
Аннотацию
@Autowired
можно использовать на полях, сеттерах и конструкторах. Причем@Autowired
внедрит зависимость в приватное поле, даже если нет конструктора или сеттера. Делает это она с помощью рефлексии (Java Reflection API)
Уточняет id бина для внедрения
@Autowired
public MusicPlayer(@Qualifier("rockMusic") Music music1, @Qualifier("classicalMusic") Music music2) {
this.music1 = music1;
this.music2 = music2;
}
- Создание файла .properties
<context:property-placeholder location="classpath:имяФайла.properties/>"
-
@Value("${musicPlayer.name}") private String name; @Value("${musicPlayer.volume}") private int volume;