Middle
235
Spring'de oluşturulan bir nesnenin yaşam döngüsü nedir?
AI'dan gelen yanıt
sobes.tech yapay zeka
- İşte oluştur: Spring nesnenin bir örneğini oluşturur.
- Özellikleri Doldur: Bağımlılıklar (
@Autowired,@Valueile işaretlenmiş alanlar) setterlar veya alanlar aracılığıyla enjekte edilir. - Aware Arayüzleri: Eğer bean
BeanNameAware,BeanFactoryAware,ApplicationContextAwareveya diğer Aware arayüzlerini uygularsa, Spring ilgili metodları çağırır (setBeanName,setBeanFactory,setApplicationContextvb.) ve bağlamı iletir. - BeanPostProcessors (ön başlangıç): Başlatma metodları çağrılmadan önce, kayıtlı
BeanPostProcessorlarınpostProcessBeforeInitializationmetodları çağrılır. - Başlatma Bean'i:
- Eğer bean
InitializingBeanuygularsa,afterPropertiesSet()metodu çağrılır. - Eğer
@Bean(initMethod="...")veya XML'deinit-methodile belirtilmişse, bu metod çağrılır.
- Eğer bean
- BeanPostProcessors (son başlangıç): Başlatmadan sonra,
postProcessAfterInitializationçağrılır. Bu aşamada genellikle proxy nesneleri oluşturulur (örneğin, işlemler veya güvenlik için). - Kullanıma hazır: Nesne tamamen yapılandırılmış ve kullanıma hazır kabul edilir.
- Yok etme:
- Eğer bean
DisposableBeanuygularsa,destroy()metodu çağrılır. - Eğer
@Bean(destroyMethod="...")veya XML'dedestroy-methodile belirtilmişse, bu metod çağrılır. @PreDestroyile işaretlenmiş metod çağrılır.
- Eğer bean
- Temizlik: Spring, bean'i bağlamdan kaldırır.
// Yaşam döngüsüne katılan bir bean örneği
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. Özellikleri doldur (setter ile)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Bağımlılık ayarlanıyor");
this.requiredDependency = requiredDependency;
}
// 3. Aware Arayüzleri
@Override
public void setBeanName(String name) {
System.out.println("3. Bean adı ayarlanıyor: " + name);
this.beanName = name;
}
// 5. Başlatma Bean'i (InitializingBean'den)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. afterPropertiesSet() çağrıldı");
// Başlatma mantığı
}
// 5. @PostConstruct'den başlatma metodu
@PostConstruct
public void postConstructMethod() {
System.out.println("5. @PostConstruct metodu çağrıldı");
// Başlatma mantığı
}
// 5. Kullanıcı tanımlı init metodu
public void customInitMethod() {
System.out.println("5. Özel init metodu çağrıldı");
// Başlatma mantığı
}
// 7. Kullanıma hazır
public void doSomething() {
System.out.println("7. Bean hazır ve bir şeyler yapıyor");
}
// 8. Yok etme (DisposableBean'den)
@Override
public void destroy() throws Exception {
System.out.println("8. destroy() DisposableBean'den çağrıldı");
// Temizlik
}
// 8. Yok etme (@PreDestroy'den)
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. @PreDestroy metodu çağrıldı");
// Temizlik
}
// 8. Kullanıcı tanımlı yok etme metodu
public void customDestroyMethod() {
System.out.println("8. Kullanıcı tanımlı destroy metodu çağrıldı");
// Temizlik
}
// Bağımlılık örneği iç sınıf
public static class Dependency {
// ...
}
}