Sobes.tech
Middle

Milline on Springis loodud objekti elutsükkel?

sobes.tech AI

Vastus AI-lt

  1. Initsieerimine: Spring loob objekti näite:
  2. Omaduste täitmine: sõltuvused (@Autowired, @Value ja teised) sisestatakse setterite või väljade kaudu:
  3. Aware liidesed: Kui bait realiseerib BeanNameAware, BeanFactoryAware, ApplicationContextAware või teised Aware-liidesed, kutsub Spring välja vastavad meetodid (setBeanName, setBeanFactory, setApplicationContext ja teised), edastades konteksti:
  4. BeanPostProcessors (enne initsialiseerimist): Enne initsialiseerimismeetodite kutsumist kutsutakse registreeritud BeanPostProcessor-ide postProcessBeforeInitialization meetodid:
  5. Bean initsialiseerimine:
    • Kui bait realiseerib InitializingBean, kutsutakse tema afterPropertiesSet() meetod:
    • Kui on määratud initsialiseerimismeetod @Bean(initMethod="...") või init-method XML-is, see kutsutakse:
  6. BeanPostProcessors (pärast initsialiseerimist): Pärast initsialiseerimist kutsutakse registreeritud BeanPostProcessor-ide postProcessAfterInitialization meetodid. Selles etapis luuakse sageli proxy-objekte (näiteks transaktsiooni või turvalisuse jaoks):
  7. Valmis kasutamiseks: Objekt peetakse täielikult konfigureerituks ja kasutusvalmis:
  8. Kustutamine:
    • Kui bait realiseerib DisposableBean, kutsutakse tema destroy() meetod:
    • Kui on määratud hävitamismeetod @Bean(destroyMethod="...") või destroy-method XML-is, see kutsutakse:
    • Kutsutakse @PreDestroy märgitud meetod:
  9. Puhastamine: Spring eemaldab bait kontekstist:
// Näidisbait, mis osaleb elutsüklis
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. Omaduste täitmine (setteritega)
    private Dependency requiredDependency;

    public void setRequiredDependency(Dependency requiredDependency) {
        System.out.println("2. Sõltuvuse määramine");
        this.requiredDependency = requiredDependency;
    }

    // 3. Aware liidesed
    @Override
    public void setBeanName(String name) {
        System.out.println("3. Baiti nimi määratud: " + name);
        this.beanName = name;
    }

    // 5. Initsialiseerimine (InitializingBean)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean afterPropertiesSet() kutsutud");
        // Initsialiseerimise loogika
    }

    // 5. @PostConstruct (Initsialiseerimine)
    @PostConstruct
    public void postConstructMethod() {
        System.out.println("5. @PostConstruct meetod kutsutud");
        // Initsialiseerimise loogika
    }

    // 5. Kasutaja initMethod
    public void customInitMethod() {
        System.out.println("5. Kasutaja init meetod kutsutud");
        // Initsialiseerimise loogika
    }

    // 7. Valmis kasutamiseks
    public void doSomething() {
        System.out.println("7. Bait on valmis ja teeb midagi");
    }

    // 8. Kustutamine (DisposableBean)
    @Override
    public void destroy() throws Exception {
        System.out.println("8. DisposableBean destroy() kutsutud");
        // Puhastamise loogika
    }

    // 8. @PreDestroy (Kustutamine)
    @PreDestroy
    public void preDestroyMethod() {
        System.out.println("8. @PreDestroy meetod kutsutud");
        // Puhastamise loogika
    }

    // 8. Kasutaja destroyMethod
    public void customDestroyMethod() {
        System.out.println("8. Kasutaja destroy meetod kutsutud");
        // Puhastamise loogika
    }

    // Sisemine klass sõltuvuse näitamiseks
    public static class Dependency {
        // ...
    }
}