Middle
Spring-də yaradılan obyektin həyat dövrü nədir?
sobes.tech Süni İntellekt
AI-dan cavab
- İnstantiasiya: Spring obyekt nümunəsini yaradır.
- Xüsusiyyətlərin Doldurulması: Asılılıqlar (məsələn,
@Autowired,@Valueilə işarələnmiş sahələr) setter və ya sahələr vasitəsilə inject edilir. - Aware İnterfeysləri: Əgər bean
BeanNameAware,BeanFactoryAware,ApplicationContextAwarevə ya digər Aware interfeyslərini implementə edirsə, Spring müvafiq metodları çağırır (setBeanName,setBeanFactory,setApplicationContextvə s.), konteksti ötürür. - BeanPostProcessors (ilk öncəsi): İstifadəyə başlamazdan əvvəl qeydiyyatdan keçmiş
BeanPostProcessor-lərinpostProcessBeforeInitializationmetodları çağırılır. - Bean İbtidai Təyinatı:
- Əgər bean
InitializingBean-i implementə edirsə, onunafterPropertiesSet()metodu çağırılır. - Əgər
@Bean(initMethod="...")və ya XML-dəinit-methodilə təyin olunubsa, həmin metod çağırılır.
- Əgər bean
- BeanPostProcessors (sonrakı): İbtidai təyinatdan sonra qeydiyyatdan keçmiş
BeanPostProcessor-lərinpostProcessAfterInitializationmetodları ç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. - İstifadəyə Hazır: Obiekt tam konfiqurasiya olunmuş və istifadəyə hazır sayılır.
- Yox Etmə:
- Əgər bean
DisposableBean-i implementə edirsə, onundestroy()metodu çağırılır. - Əgər
@Bean(destroyMethod="...")və ya XML-dədestroy-methodilə təyin olunubsa, həmin metod çağırılır. @PreDestroyilə işarələnmiş metod çağırılır.
- Əgər bean
- 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 {
// ...
}
}