Sobes.tech
Middle

Springda yaratilgan ob'ektning hayot sikli qanday?

sobes.tech AI

AIdan javob

  1. Instantiate: Spring ob'ekt nusxasini yaratadi.
  2. Populate Properties: Bog'liqliklar (@Autowired, @Value bilan belgilangan maydonlar) setterlar yoki maydonlar orqali inject qilinadi.
  3. Aware Interfeyslar: Agar bean BeanNameAware, BeanFactoryAware, ApplicationContextAware yoki boshqa Aware-interfeyslarni amalga oshirsa, Spring mos metodlarni chaqiradi (setBeanName, setBeanFactory, setApplicationContext va boshqalar), kontekstni o'tkazib.
  4. BeanPostProcessors (pre-initialization): Initsializatsiya metodlari chaqirilishidan oldin, ro'yxatdan o'tgan BeanPostProcessorlarning postProcessBeforeInitialization chaqiriladi.
  5. Initializing Bean:
    • Agar bean InitializingBeanni amalga oshirsa, uning afterPropertiesSet() metodi chaqiriladi.
    • Agar @Bean(initMethod="...") yoki XMLda init-method orqali ko'rsatilgan bo'lsa, bu metod chaqiriladi.
  6. BeanPostProcessors (post-initialization): Initsializatsiyadan so'ng, postProcessAfterInitialization chaqiriladi. Bu bosqichda ko'pincha proxy obyektlar yaratiladi (masalan, tranzaktsiya yoki xavfsizlik uchun).
  7. Ready to Use: Ob'ekt to'liq konfiguratsiya qilingan va foydalanishga tayyor hisoblanadi.
  8. Destroy:
    • Agar bean DisposableBeanni amalga oshirsa, uning destroy() metodi chaqiriladi.
    • Agar @Bean(destroyMethod="...") yoki XMLda destroy-method bilan ko'rsatilgan bo'lsa, bu metod chaqiriladi.
    • @PreDestroy bilan belgilangan metod chaqiriladi.
  9. 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 {
        // ...
    }
}