Sobes.tech
Middle

Spring-də yaradılan obyektin həyat dövrü nədir?

sobes.tech Süni İntellekt

AI-dan cavab

  1. İnstantiasiya: Spring obyekt nümunəsini yaradır.
  2. Xüsusiyyətlərin Doldurulması: Asılılıqlar (məsələn, @Autowired, @Value ilə işarələnmiş sahələr) setter və ya sahələr vasitəsilə inject edilir.
  3. Aware İnterfeysləri: Əgər bean BeanNameAware, BeanFactoryAware, ApplicationContextAware və ya digər Aware interfeyslərini implementə edirsə, Spring müvafiq metodları çağırır (setBeanName, setBeanFactory, setApplicationContext və s.), konteksti ötürür.
  4. BeanPostProcessors (ilk öncəsi): İstifadəyə başlamazdan əvvəl qeydiyyatdan keçmiş BeanPostProcessor-lərin postProcessBeforeInitialization metodları çağırılır.
  5. Bean İbtidai Təyinatı:
    • Əgər bean InitializingBean-i implementə edirsə, onun afterPropertiesSet() metodu çağırılır.
    • Əgər @Bean(initMethod="...") və ya XML-də init-method ilə təyin olunubsa, həmin metod çağırılır.
  6. BeanPostProcessors (sonrakı): İbtidai təyinatdan sonra qeydiyyatdan keçmiş BeanPostProcessor-lərin postProcessAfterInitialization metodları çağırılır. Bu mərhələdə proxy obyektləri (məsələn, tranzaksiya və ya təhlükəsizlik üçün) yaradılır.
  7. İstifadəyə Hazır: Obiekt tam konfiqurasiya olunmuş və istifadəyə hazır sayılır.
  8. Yox Etmə:
    • Əgər bean DisposableBean-i implementə edirsə, onun destroy() metodu çağırılır.
    • Əgər @Bean(destroyMethod="...") və ya XML-də destroy-method ilə təyin olunubsa, həmin metod çağırılır.
    • @PreDestroy ilə işarələnmiş metod çağırılır.
  9. Təmizləmə: Spring bean-i kontekstdən silir.
// Dövran dövründə iştirak edən bean nümunəsi
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. Xüsusiyyətlərin Doldurulması (setter vasitəsilə)
    private Dependency requiredDependency;

    public void setRequiredDependency(Dependency requiredDependency) {
        System.out.println("2. Asılılıq təyin edilir");
        this.requiredDependency = requiredDependency;
    }

    // Aware İnterfeysləri
    @Override
    public void setBeanName(String name) {
        System.out.println("3. Bean adı təyin edilir: " + name);
        this.beanName = name;
    }

    // İbtidai Təyinat (InitializingBean-dən)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean-in afterPropertiesSet() çağırıldı");
        // İbtidai təyinat loqikası
    }

    // @PostConstruct ilə İbtidai Təyinat
    @PostConstruct
    public void postConstructMethod() {
        System.out.println("5. @PostConstruct metodu çağırıldı");
        // İbtidai təyinat loqikası
    }

    // Özəl initMethod ilə İbtidai Təyinat
    public void customInitMethod() {
        System.out.println("5. Özəl init metodu çağırıldı");
        // İbtidai təyinat loqikası
    }

    // İstifadəyə Hazır
    public void doSomething() {
        System.out.println("7. Bean hazırdır və nəsə edir");
    }

    // Yox Etmə (DisposableBean-dən)
    @Override
    public void destroy() throws Exception {
        System.out.println("8. DisposableBean-in destroy() metodu çağırıldı");
        // Təmizləmə loqikası
    }

    // @PreDestroy ilə Yox Etmə
    @PreDestroy
    public void preDestroyMethod() {
        System.out.println("8. @PreDestroy metodu çağırıldı");
        // Təmizləmə loqikası
    }

    // Özəl destroyMethod ilə Yox Etmə
    public void customDestroyMethod() {
        System.out.println("8. Özəl destroy metodu çağırıldı");
        // Təmizləmə loqikası
    }

    // Nümunə asılılıq üçün daxili sinif
    public static class Dependency {
        // ...
    }
}