Sobes.tech
Middle
235

Spring'de oluşturulan bir nesnenin yaşam döngüsü nedir?

AI'dan gelen yanıt

sobes.tech yapay zeka

  1. İşte oluştur: Spring nesnenin bir örneğini oluşturur.
  2. Özellikleri Doldur: Bağımlılıklar (@Autowired, @Value ile işaretlenmiş alanlar) setterlar veya alanlar aracılığıyla enjekte edilir.
  3. Aware Arayüzleri: Eğer bean BeanNameAware, BeanFactoryAware, ApplicationContextAware veya diğer Aware arayüzlerini uygularsa, Spring ilgili metodları çağırır (setBeanName, setBeanFactory, setApplicationContext vb.) ve bağlamı iletir.
  4. BeanPostProcessors (ön başlangıç): Başlatma metodları çağrılmadan önce, kayıtlı BeanPostProcessorların postProcessBeforeInitialization metodları çağrılır.
  5. Başlatma Bean'i:
    • Eğer bean InitializingBean uygularsa, afterPropertiesSet() metodu çağrılır.
    • Eğer @Bean(initMethod="...") veya XML'de init-method ile belirtilmişse, bu metod çağrılır.
  6. 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).
  7. Kullanıma hazır: Nesne tamamen yapılandırılmış ve kullanıma hazır kabul edilir.
  8. Yok etme:
    • Eğer bean DisposableBean uygularsa, destroy() metodu çağrılır.
    • Eğer @Bean(destroyMethod="...") veya XML'de destroy-method ile belirtilmişse, bu metod çağrılır.
    • @PreDestroy ile işaretlenmiş metod çağrılır.
  9. 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 {
        // ...
    }
}