Middle
Springda yaratilgan ob'ektning hayot sikli qanday?
sobes.tech AI
AIdan javob
- Instantiate: Spring ob'ekt nusxasini yaratadi.
- Populate Properties: Bog'liqliklar (
@Autowired,@Valuebilan belgilangan maydonlar) setterlar yoki maydonlar orqali inject qilinadi. - Aware Interfeyslar: Agar bean
BeanNameAware,BeanFactoryAware,ApplicationContextAwareyoki boshqa Aware-interfeyslarni amalga oshirsa, Spring mos metodlarni chaqiradi (setBeanName,setBeanFactory,setApplicationContextva boshqalar), kontekstni o'tkazib. - BeanPostProcessors (pre-initialization): Initsializatsiya metodlari chaqirilishidan oldin, ro'yxatdan o'tgan
BeanPostProcessorlarningpostProcessBeforeInitializationchaqiriladi. - Initializing Bean:
- Agar bean
InitializingBeanni amalga oshirsa, uningafterPropertiesSet()metodi chaqiriladi. - Agar
@Bean(initMethod="...")yoki XMLdainit-methodorqali ko'rsatilgan bo'lsa, bu metod chaqiriladi.
- Agar bean
- BeanPostProcessors (post-initialization): Initsializatsiyadan so'ng,
postProcessAfterInitializationchaqiriladi. Bu bosqichda ko'pincha proxy obyektlar yaratiladi (masalan, tranzaktsiya yoki xavfsizlik uchun). - Ready to Use: Ob'ekt to'liq konfiguratsiya qilingan va foydalanishga tayyor hisoblanadi.
- Destroy:
- Agar bean
DisposableBeanni amalga oshirsa, uningdestroy()metodi chaqiriladi. - Agar
@Bean(destroyMethod="...")yoki XMLdadestroy-methodbilan ko'rsatilgan bo'lsa, bu metod chaqiriladi. @PreDestroybilan belgilangan metod chaqiriladi.
- Agar bean
- Cleanup: Spring beanni kontekstdan olib tashlaydi.
// Hayot aylanishida qatnashadigan bean misoli
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.BeanNameAware;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class MySpringBean implements InitializingBean, DisposableBean, BeanNameAware {
private String beanName;
// 2. Properties to'ldirish (setter orqali)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Bog'liqlikni o'rnatish");
this.requiredDependency = requiredDependency;
}
// 3. Aware Interfeyslar
@Override
public void setBeanName(String name) {
System.out.println("3. Bean nomini o'rnatish: " + name);
this.beanName = name;
}
// 5. Initializing Bean (from InitializingBean)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. afterPropertiesSet() chaqirildi");
// Initsializatsiya mantiqi
}
// 5. @PostConstruct metod
@PostConstruct
public void postConstructMethod() {
System.out.println("5. @PostConstruct metod chaqirildi");
// Initsializatsiya mantiqi
}
// 5. Maxsus init metod
public void customInitMethod() {
System.out.println("5. Maxsus init metod chaqirildi");
// Initsializatsiya mantiqi
}
// 7. Tayyor
public void doSomething() {
System.out.println("7. Bean tayyor va nimadir qilmoqda");
}
// 8. Destroy (DisposableBean dan)
@Override
public void destroy() throws Exception {
System.out.println("8. DisposableBean destroy() chaqirildi");
// Tozalash mantiqi
}
// 8. @PreDestroy (dan destroy)
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. @PreDestroy metod chaqirildi");
// Tozalash mantiqi
}
// 8. Maxsus destroy metod
public void customDestroyMethod() {
System.out.println("8. Maxsus destroy metod chaqirildi");
// Tozalash mantiqi
}
// Namuna bog'liqlik uchun ichki sinf
public static class Dependency {
// ...
}
}