Bean Lifecycle
Bean lifecycle ke MAIN steps: 1) INSTANTIATION — Spring constructor call karके object banata hai. 2) POPULATE PROPERTIES — dependencies inject hoti hain. 3) INITIALIZATION — @PostConstruct method (ya InitializingBean.afterPropertiesSet()) call hota hai, agar define ho. 4) READY TO USE — bean ab application mein use ke liye available hai. 5) DESTRUCTION — container shutdown hone par, @PreDestroy method (ya DisposableBean.destroy()) call hota hai.
@PostConstruct useful hai jab bean ko dependencies mil jaने ke BAAD kuch setup karna ho (jaise cache warm-up, connection pool initialize karna) — constructor mein ye karna risky hai kyunki dependencies abhi fully inject nahi hui hoti.
@Service
public class CacheService {
@Autowired
private DataRepository repository;
@PostConstruct
public void init() {
// Dependencies inject ho chuki hain, ab safe hai:
System.out.println("Cache warming up...");
loadInitialData();
}
@PreDestroy
public void cleanup() {
System.out.println("Closing connections...");
// resource cleanup, jaise DB connections close karna
}
}- Order: Instantiate → Populate properties → @PostConstruct → Ready → @PreDestroy
- @PostConstruct = setup jo dependencies milne ke BAAD chahiye
- @PreDestroy = cleanup jab container shutdown hota hai
@PostConstruct/@PreDestroy annotations ke ALTERNATIVE, Spring do INTERFACES bhi deता hai — InitializingBean (afterPropertiesSet() method) aur DisposableBean (destroy() method). Ye Spring-SPECIFIC hain (annotations generic Java hain) — isliye MODERN code mein annotations zyaada PREFER kiye jaate hain.
BeanPostProcessor ek ADVANCED interface hai jo HAR bean ke lifecycle mein hook kar sakta hai (initialization se PEHLE aur BAAD mein) — Spring KHUD internally isse use karta hai (jaise @Autowired ko process karne ke liye). Custom BeanPostProcessor RARELY likha jaata hai, lekin Spring ke internals samajhने ke liye important concept hai.
- postProcessBeforeInitialization() — @PostConstruct se PEHLE
- postProcessAfterInitialization() — @PostConstruct ke BAAD
- Spring internally isko AOP proxies banaने ke liye use karta hai