[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-conditional-i-uslovnaya-konfiguratsiya-v-spring-boot":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},652,"chto-takoe-conditional-i-uslovnaya-konfiguratsiya-v-spring-boot",14,"spring","Spring","🌱","Что такое @Conditional и условная конфигурация в Spring Boot?","`@Conditional` -- базовая аннотация Spring для создания бинов только при выполнении определённых условий. Spring Boot расширяет её множеством специализированных аннотаций, которые лежат в основе механизма автоконфигурации.\n\n```java\n@Configuration\npublic class ConditionalConfig {\n\n    @Bean\n    @ConditionalOnClass(name = \"com.redis.RedisClient\")\n    public CacheManager redisCacheManager() {\n        return new RedisCacheManager();\n    }\n\n    @Bean\n    @ConditionalOnMissingBean(CacheManager.class)\n    public CacheManager defaultCacheManager() {\n        return new ConcurrentMapCacheManager();\n    }\n\n    @Bean\n    @ConditionalOnProperty(name = \"feature.notifications.enabled\", havingValue = \"true\")\n    public NotificationService notificationService() {\n        return new EmailNotificationService();\n    }\n}\n```\n\n### Feature toggles (частый кейс)\n\n```properties\nfeature.new-payment-system.enabled=true\n```\n\n```java\n@Bean\n@ConditionalOnProperty(name = \"feature.new-payment-system.enabled\", havingValue = \"true\")\npublic PaymentService newPaymentService() { return new NewPaymentService(); }\n\n@Bean\n@ConditionalOnProperty(name = \"feature.new-payment-system.enabled\",\n                       havingValue = \"false\", matchIfMissing = true)\npublic PaymentService legacyPaymentService() { return new LegacyPaymentService(); }\n```\n\n### Собственное условие\n\n```java\npublic class OnLinuxCondition implements Condition {\n    @Override\n    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {\n        String os = System.getProperty(\"os.name\");\n        return os != null && os.toLowerCase().contains(\"linux\");\n    }\n}\n\n@Bean\n@Conditional(OnLinuxCondition.class)\npublic FileWatcher linuxFileWatcher() { return new InotifyFileWatcher(); }\n```\n\n> **На собеседовании:** покажите понимание `@ConditionalOnMissingBean` как основы автоконфигурации. Частая ошибка -- чрезмерное использование @Conditional, превращающее конфигурацию в нечитаемую. Если логика сложная -- используйте профили.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое @Conditional и условная конфигурация в Spring Boot — Gymterview","`@Conditional` -- базовая аннотация Spring для создания бинов только при выполнении определённых условий. Spring Boot расширяет её множеством специализированных","`@Conditional` -- базовая аннотация Spring для создания бинов только при выполнении определённых условий. Spring Boot ра",[7,13],"`@Conditional` -- базовая аннотация Spring для создания бинов только при выполнении определённых условий. Spring Boot расширяет её множеством специализированных аннотаций, которые лежат в основе механизма автоконфигурации.",true]