🚦
Auto-Configuration

@Conditional Annotations Family

@ConditionalOnClass, @ConditionalOnProperty
💡 @Conditional annotations ek BOUNCER hain CLUB ke DOOR par — HAR CONDITION (dress code, guest list, age) CHECK hoti hai, aur SIRF TAB ENTRY (bean creation) milती hai jab SAARI conditions SATISFY hoती hain.

Spring Boot MULTIPLE @Conditional* annotations DETA hai, JO auto-configuration ke FOUNDATION hain — @ConditionalOnClass (agar EK SPECIFIC class classpath par PRESENT hai), @ConditionalOnMissingBean (agar USER ne KHUD ye bean NAHI banayi), @ConditionalOnProperty (agar EK SPECIFIC property SET hai, EK SPECIFIC value ke saath), @ConditionalOnWebApplication (agar application EK WEB app hai).

Ye annotations APNI KHUD KI classes/beans PAR bhi LAGAI ja sakti hain — SIRF Spring Boot ke INTERNAL auto-configuration tak LIMITED nahi hain. Isse APNA khud ka "CONDITIONAL BEAN CREATION" LOGIC likh sakte ho, jaise ENVIRONMENT-specific ya FEATURE-FLAG-based beans.

@Configuration
public class FeatureConfig {
    @Bean
    @ConditionalOnProperty(name = "app.email.provider", havingValue = "sendgrid")
    public EmailService sendGridEmailService() {
        return new SendGridEmailService();
    }

    @Bean
    @ConditionalOnProperty(name = "app.email.provider", havingValue = "ses", matchIfMissing = true)
    public EmailService sesEmailService() {
        return new SesEmailService();   // DEFAULT, agar property set nahi hai
    }
}
🚦
@Conditional annotations ek BOUNCER hain CLUB ke DOOR par — HAR CONDITION (dress code, guest list, age) CHECK hoti hai, aur SIRF TAB ENTRY (bean creation) milती hai jab SAARI conditions SATISFY hoती hain.
1 / 2
⚡ Quick Recap
  • @ConditionalOnClass = classpath par SPECIFIC class present honi CHAHIYE
  • @ConditionalOnMissingBean = user NE khud bean NAHI banayi honi CHAHIYE
  • @ConditionalOnProperty = SPECIFIC property, SPECIFIC value ke saath, SET honi CHAHIYE
On this page (2 subtopics)

@ConditionalOnProperty se, EK bean SIRF TAB create hoti hai jab EK SPECIFIC property SET (ya EK SPECIFIC VALUE) ho — YE "FEATURE FLAG" jaisa PATTERN enable karta hai, application.properties SE features ON/OFF kiye ja sakte hain.

@Bean
@ConditionalOnProperty(name = "app.feature.newSearch", havingValue = "true")
public SearchService newSearchService() {
    return new ElasticsearchSearchService();
}
// application.properties: app.feature.newSearch=true (ya false)

MULTIPLE @Conditional* annotations EK BEAN par STACK ki ja sakti hain — SAB conditions TRUE honi CHAHIYE, tabhi bean CREATE hogi (AND logic). Complex, CUSTOM conditions ke liye, @Conditional(CustomCondition.class) se APNA khud ka Condition class bhi likh sakte ho.

@Bean
@ConditionalOnClass(RedisTemplate.class)
@ConditionalOnMissingBean(CacheManager.class)
@ConditionalOnProperty(name = "app.cache.enabled", havingValue = "true", matchIfMissing = true)
public CacheManager cacheManager() { /* ... */ }