📝
Configuration

Java-Based Configuration

@Configuration + @Bean
💡 Java-based config ek TYPED RECIPE CARD hai — XML ek handwritten note hai (typos ho sakte hain, compiler check nahi karta), Java @Configuration class ek PRINTED, VALIDATED recipe hai — IDE autocomplete karta hai, compiler galtiyaan pakadता hai.

@Configuration class Spring beans define karने ka MODERN tareeka hai — Java code ke through, XML ke bajaye. Har @Bean-annotated method ek bean CREATE karta hai, jiska return type/method name bean ki definition hoti hai. Type-safe hai — agar wrong type return karo, COMPILE TIME par hi pakda jaata hai.

Java-config THIRD-PARTY libraries ko Spring-managed banane ke liye ZAROORI hai — jaise RestTemplate, ObjectMapper, DataSource — jinke source code mein @Component annotation ADD nahi kar sakte (kyunki wo tumhari class nahi hai).

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule());
        return mapper;
    }
}
📝
Java-based config ek TYPED RECIPE CARD hai — XML ek handwritten note hai (typos ho sakte hain, compiler check nahi karta), Java @Configuration class ek PRINTED, VALIDATED recipe hai — IDE autocomplete karta hai, compiler galtiyaan pakadता hai.
1 / 2
⚡ झट से Recap
  • @Configuration class = beans define karne ka Java-based tareeka
  • Third-party classes ke liye ZAROORI (jinme @Component add nahi kar sakte)
  • Type-safe — compile time par errors pakde jaate hain
इस page में (2 subtopics)

@Configuration class ek "recipe book" hai beans ke liye — har @Bean-annotated method EK bean definition hai. Spring internally is class ko CGLIB se subclass karta hai, taaki @Bean methods ko call karne par HAMESHA same singleton instance return ho (agar ek @Bean method dusre @Bean method ko call kare, to naya object NAHI banta, existing bean hi milta hai).

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() { return new HikariDataSource(); }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());   // SAME dataSource() bean milegi, naya nahi banega
    }
}

Bade applications mein, configuration ko MULTIPLE @Configuration classes mein SPLIT karna common hai (jaise DatabaseConfig, SecurityConfig, WebConfig) — @Import annotation se unhe MAIN configuration class mein combine kiya jaata hai.

@Configuration
@Import({ DatabaseConfig.class, SecurityConfig.class })
public class AppConfig { }