Java-Based Configuration
@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;
}
}- @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
@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 { }