Sobes.tech
Middle

Kāda ir Spring izveidota objekta dzīves cikls?

sobes.tech AI

Atbilde no AI

  1. Izveidot: Spring izveido objekta piemēru:
  2. Aizpildīt īpašības: atkarības (@Autowired, @Value un citi) tiek ievadītas caur sētām vai laukiem:
  3. Aware saskarnes: Ja bīns realizē BeanNameAware, BeanFactoryAware, ApplicationContextAware vai citas Aware saskarnes, Spring izsauc atbilstošās metodes (setBeanName, setBeanFactory, setApplicationContext un citas), nododot kontekstu:
  4. BeanPostProcessors (pirms inicializācijas): Pirms inicializācijas metožu izsaukšanas tiek izsaukti reģistrētie BeanPostProcessor postProcessBeforeInitialization metodes:
  5. Bean inicializācija:
    • Ja bīns realizē InitializingBean, tiek izsaukts tā afterPropertiesSet() metodes:
    • Ja ir norādīta inicializācijas metode @Bean(initMethod="...") vai init-method XML, tā tiek izsaukta:
  6. BeanPostProcessors (pēc inicializācijas): Pēc inicializācijas tiek izsaukti reģistrētie BeanPostProcessor postProcessAfterInitialization metodes. Šajā posmā bieži tiek izveidoti proxy objekti (piemēram, transakcijām vai drošībai):
  7. Gatavs lietošanai: Objekts tiek uzskatīts par pilnībā konfigurētu un gatavu lietošanai:
  8. Iznīcināšana:
    • Ja bīns realizē DisposableBean, tiek izsaukts tā destroy() metodes:
    • Ja ir norādīta iznīcināšanas metode @Bean(destroyMethod="...") vai destroy-method XML, tā tiek izsaukta:
    • Tiek izsaukta @PreDestroy atzīmētā metode:
  9. Tīrīšana: Spring noņem bīnu no konteksta:
// Piemēra bīns, kas piedalās dzīves ciklā
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. Savybju aizpildīšana (caur sētām)
    private Dependency requiredDependency;

    public void setRequiredDependency(Dependency requiredDependency) {
        System.out.println("2. Ievieto atkarību");
        this.requiredDependency = requiredDependency;
    }

    // 3. Aware saskarnes
    @Override
    public void setBeanName(String name) {
        System.out.println("3. Bīna nosaukums iestatīts: " + name);
        this.beanName = name;
    }

    // 5. Inicializācija (InitializingBean)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean afterPropertiesSet() izsaukts");
        // Inicializācijas loģika
    }

    // 5. @PostConstruct (Inicializācija)
    @PostConstruct
    public void postConstructMethod() {
        System.out.println("5. @PostConstruct metode izsaukta");
        // Inicializācijas loģika
    }

    // 5. Lietotāja initMethod
    public void customInitMethod() {
        System.out.println("5. Lietotāja init metode izsaukta");
        // Inicializācijas loģika
    }

    // 7. Gatavs lietošanai
    public void doSomething() {
        System.out.println("7. Bīns ir gatavs un dara kaut ko");
    }

    // 8. Iznīcināšana (DisposableBean)
    @Override
    public void destroy() throws Exception {
        System.out.println("8. DisposableBean destroy() izsaukts");
        // Tīrīšanas loģika
    }

    // 8. @PreDestroy (Iznīcināšana)
    @PreDestroy
    public void preDestroyMethod() {
        System.out.println("8. @PreDestroy metode izsaukta");
        // Tīrīšanas loģika
    }

    // 8. Lietotāja destroyMethod
    public void customDestroyMethod() {
        System.out.println("8. Lietotāja destroy metode izsaukta");
        // Tīrīšanas loģika
    }

    // Iekšējā klase atkarībai
    public static class Dependency {
        // ...
    }
}