Middle
Milline on Springis loodud objekti elutsükkel?
sobes.tech AI
Vastus AI-lt
- Initsieerimine: Spring loob objekti näite:
- Omaduste täitmine: sõltuvused (
@Autowired,@Valueja teised) sisestatakse setterite või väljade kaudu: - Aware liidesed: Kui bait realiseerib
BeanNameAware,BeanFactoryAware,ApplicationContextAwarevõi teised Aware-liidesed, kutsub Spring välja vastavad meetodid (setBeanName,setBeanFactory,setApplicationContextja teised), edastades konteksti: - BeanPostProcessors (enne initsialiseerimist): Enne initsialiseerimismeetodite kutsumist kutsutakse registreeritud
BeanPostProcessor-idepostProcessBeforeInitializationmeetodid: - Bean initsialiseerimine:
- Kui bait realiseerib
InitializingBean, kutsutakse temaafterPropertiesSet()meetod: - Kui on määratud initsialiseerimismeetod
@Bean(initMethod="...")võiinit-methodXML-is, see kutsutakse:
- Kui bait realiseerib
- BeanPostProcessors (pärast initsialiseerimist): Pärast initsialiseerimist kutsutakse registreeritud
BeanPostProcessor-idepostProcessAfterInitializationmeetodid. Selles etapis luuakse sageli proxy-objekte (näiteks transaktsiooni või turvalisuse jaoks): - Valmis kasutamiseks: Objekt peetakse täielikult konfigureerituks ja kasutusvalmis:
- Kustutamine:
- Kui bait realiseerib
DisposableBean, kutsutakse temadestroy()meetod: - Kui on määratud hävitamismeetod
@Bean(destroyMethod="...")võidestroy-methodXML-is, see kutsutakse: - Kutsutakse
@PreDestroymärgitud meetod:
- Kui bait realiseerib
- 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 {
// ...
}
}