Sobes.tech
Middle

Spring-ში შექმნილი ობიექტის სიცოცხლის ციკლი რა არის?

sobes.tech AI

პასუხი AI-სგან

  1. შექმნა: Spring ქმნის ობიექტის მაგალითს:
  2. მონაცემების შევსება: დამოკიდებულებები (@Autowired, @Value და სხვა) ინახება სეტერების ან ველების მეშვეობით:
  3. Aware ინტერფეისები: თუ ბინი ახორციელებს BeanNameAware, BeanFactoryAware, ApplicationContextAware ან სხვა Aware ინტერფეისებს, Spring იძახის შესაბამის მეთოდებს (setBeanName, setBeanFactory, setApplicationContext და სხვა), გადასცემს კონტექსტს:
  4. BeanPostProcessors (ინიციალიზაციის წინ): ინიციალიზაციის მეთოდების გამოძახებამდე, რეგისტრირებული BeanPostProcessor-ების postProcessBeforeInitialization მეთოდები იძახება:
  5. Bean-ის ინიციალიზაცია:
    • თუ ბინი ახორციელებს InitializingBean, იძახება მისი afterPropertiesSet() მეთოდი:
    • თუ მითითებულია ინიციალიზაციის მეთოდი @Bean(initMethod="...") ან XML-ის init-method, ის იძახება:
  6. BeanPostProcessors (ინიციალიზაციის შემდეგ): ინიციალიზაციის შემდეგ, რეგისტრირებული BeanPostProcessor-ების postProcessAfterInitialization მეთოდები იძახება. ამ ეტაპზე ხშირად ქმნიან პროქსის ობიექტებს (მაგალითად, ტრანზაქციონულობის ან უსაფრთხოების მიზნით):
  7. მზად არის გამოყენებისთვის: ობიექტი მიიჩნევა სრულად კონფიგურირებულად და მზად არის გამოყენებისთვის:
  8. მოწყვეტა:
    • თუ ბინი ახორციელებს DisposableBean, იძახება მისი destroy() მეთოდი:
    • თუ მითითებულია განადგურების მეთოდი @Bean(destroyMethod="...") ან XML-ის destroy-method, ის იძახება:
    • იძახება @PreDestroy-ით მონიშნული მეთოდი:
  9. სუფთავება: Spring ამოწმებს ბინ კონტექსტიდან:
// მაგალითი ბინზე, რომელიც მონაწილეობს სიცოცხლის ციკლში
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. მონაცემების შევსება (სეტერით)
    private Dependency requiredDependency;

    public void setRequiredDependency(Dependency requiredDependency) {
        System.out.println("2. დამოკიდებულების დაყენება");
        this.requiredDependency = requiredDependency;
    }

    // 3. Aware ინტერფეისები
    @Override
    public void setBeanName(String name) {
        System.out.println("3. ბინის სახელი მითითებულია: " + name);
        this.beanName = name;
    }

    // 5. ინიციალიზაცია (InitializingBean)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean afterPropertiesSet() გამოძახებულია");
        // ინიციალიზაციის ლოგიკა
    }

    // 5. @PostConstruct (ინიციალიზაცია)
    @PostConstruct
    public void postConstructMethod() {
        System.out.println("5. @PostConstruct მეთოდი გამოძახებულია");
        // ინიციალიზაციის ლოგიკა
    }

    // 5. მომხმარებლის initMethod
    public void customInitMethod() {
        System.out.println("5. მომხმარებლის init მეთოდი გამოძახებულია");
        // ინიციალიზაციის ლოგიკა
    }

    // 7. მზად არის გამოყენებისთვის
    public void doSomething() {
        System.out.println("7. ბინი მზად არის და რაღაცას აკეთებს");
    }

    // 8. მოწყვეტა (DisposableBean)
    @Override
    public void destroy() throws Exception {
        System.out.println("8. DisposableBean destroy() გამოძახებულია");
        // სუფთავების ლოგიკა
    }

    // 8. @PreDestroy (მოწყვეტა)
    @PreDestroy
    public void preDestroyMethod() {
        System.out.println("8. @PreDestroy მეთოდი გამოძახებულია");
        // სუფთავების ლოგიკა
    }

    // 8. მომხმარებლის destroyMethod
    public void customDestroyMethod() {
        System.out.println("8. მომხმარებლის destroy მეთოდი გამოძახებულია");
        // სუფთავების ლოგიკა
    }

    // შიდა კლასი დამოკიდებულებისთვის
    public static class Dependency {
        // ...
    }
}