Контекст Spring — это контейнер различных бинов: как самого spring-а, так и пользовательских. Аннотация @Conditional — это гибкий инструмент управления контекстом Spring.
Аннотация @Conditional является более тонкой «настройкой» контекста по сравнению с использованием профилей.
Примеры, когда может понадобиться аннотация @Conditional :
- возможность изменять контекст приложения без перекомпиляции (отслеживая значение какого-либо параметра в файле свойств)
- при работе в несинхронизированных командах (кто-то не успевает выполнить доработку, а у кого-то функционал уже готов — контекст должен это учитывать)
Объявление аннотации @Conditional :
@Retention(value=RUNTIME)
@Documented
public @interface Conditional {
Class <? extends Condition> []
}
Condition — это функциональный интерфейс, который содержит метод
В методе matches через аргумент context можно получить доступ к контейнеру Spring-а и к свойствам приложения , а через аргумент metadata — доступ к аннотациям класса либо метода, который аннотирован @Conditional