Какие ещё conditional-аннотации Spring Boot вы знаете?

Аннотация @Conditional в Spring используется для условного создания бинов в контексте приложения.

Короткий ответ

Что ответить на собеседовании

Аннотация @Conditional в Spring используется для условного создания бинов в контексте приложения. Она позволяет включать или исключать определённые компоненты в зависимости от заданных условий. Основные типы и варианты использования:

Подробный разбор

Ответ с пояснениями

Аннотация @Conditional в Spring используется для условного создания бинов в контексте приложения. Она позволяет включать или исключать определённые компоненты в зависимости от заданных условий. Основные типы и варианты использования:

  • @Conditional — базовая аннотация, принимает класс, реализующий интерфейс Condition. В этом классе описывается логика, при которой бин будет создан.

  • Специализированные аннотации, основанные на @Conditional:

    • @ConditionalOnProperty — создаёт бин, если задано определённое свойство в конфигурации.
    • @ConditionalOnClass — бин создаётся, если в classpath присутствует указанный класс.
    • @ConditionalOnMissingBean — бин создаётся, если в контексте отсутствует бин определённого типа.
    • @ConditionalOnBean — бин создаётся, если в контексте уже есть бин определённого типа.
    • @ConditionalOnExpression — бин создаётся, если выражение SpEL возвращает true.

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

@Configuration
public class MyConfig {

    @Bean
    @ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
    public MyService myService() {
        return new MyService();
    }
}

Таким образом, @Conditional и её производные позволяют гибко управлять конфигурацией приложения в зависимости от окружения, наличия классов, свойств и других условий.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее