🪄
Spring Boot

Auto-Configuration

Classpath-Based Magic
💡 Auto-configuration ek SMART HOME SYSTEM hai — jaise hi tum ek naya device (library) connect karte ho, system AUTOMATICALLY detect karके sahi settings apply kar deta hai (jaise naya bulb connect karte hi wo automatically WiFi se jud jaaye) — manual setup ki zaroorat nahi.

@EnableAutoConfiguration (jo @SpringBootApplication ke andar included hai) CLASSPATH scan karta hai aur DECIDE karta hai kya configure karna hai. Agar spring-boot-starter-data-jpa aur H2 database classpath par hain, Spring Boot AUTOMATICALLY ek DataSource, EntityManagerFactory, aur TransactionManager bana deta hai — bina EK LINE code likhे.

Ye "magic" CONDITIONAL annotations se kaam karta hai internally — @ConditionalOnClass (agar ye class classpath par hai), @ConditionalOnMissingBean (agar user ne khud ye bean nahi banayi), @ConditionalOnProperty (agar ek specific property set hai).

// Bina auto-configuration ke, manually likhna padta:
@Bean
public DataSource dataSource() {
    return DataSourceBuilder.create()
        .url("jdbc:h2:mem:testdb")
        .driverClassName("org.h2.Driver")
        .build();
}

// Spring Boot ke saath — bas dependency add karo, KUCH bhi likhne ki zaroorat nahi:
// (H2 + starter-data-jpa classpath par hai → DataSource AUTOMATICALLY ban jaata hai)
🪄
Auto-configuration ek SMART HOME SYSTEM hai — jaise hi tum ek naya device (library) connect karte ho, system AUTOMATICALLY detect karके sahi settings apply kar deta hai (jaise naya bulb connect karte hi wo automatically WiFi se jud jaaye) — manual setup ki zaroorat nahi.
1 / 6
⚡ Quick Recap
  • Classpath dekh ke automatically beans configure karta hai
  • @ConditionalOnClass/@ConditionalOnMissingBean internally use hote hain
  • Khud ek bean define karne par, auto-configuration BACK OFF ho jaata hai
On this page (2 subtopics)

@EnableAutoConfiguration classpath par PRESENT libraries DEKH ke DECIDE karta hai kya configure karna hai — agar H2 database JAR classpath par hai, Spring Boot AUTOMATICALLY ek in-memory DataSource bean bana deta hai. Ye "CONDITIONAL" configuration hai — @ConditionalOnClass, @ConditionalOnMissingBean jaise annotations internally use hote hain.

// Internally, Spring Boot ke andar (simplified):
@Configuration
@ConditionalOnClass(DataSource.class)      // sirf agar DataSource classpath par hai
@ConditionalOnMissingBean(DataSource.class) // sirf agar user ne khud DataSource nahi banaya
public class DataSourceAutoConfiguration {
    @Bean
    public DataSource dataSource() { /* sensible default */ }
}

Agar tum KHUD ek bean define karo (jaise apna custom DataSource @Bean method), Spring Boot ka auto-configuration AUTOMATICALLY BACK OFF ho jaata hai us bean ke liye (@ConditionalOnMissingBean ki wajah se) — tumhari definition PRIORITY leti hai.

💡Tip: Ye pattern ("sensible default, lekin easily overridable") Spring Boot ki CORE PHILOSOPHY hai — "convention over configuration", lekin jab zaroorat ho, PURA control tumhare paas rehta hai.