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 (նախագծման նախորդ փուլ): Նախքան մեթոդների կանչումը, կանչվում է postProcessBeforeInitialization գրանցված BeanPostProcessor-ներից:
  5. Բին Initialization:
    • Եթե բինը իրականացնում է InitializingBean, կանչվում է նրա afterPropertiesSet() մեթոդը:
    • Եթե նշված է initialization մեթոդը @Bean(initMethod="...") կամ init-method XML-ում, այն կանչվում է:
  6. BeanPostProcessors (նախագծման հետո): Initialization-ից հետո կանչվում է postProcessAfterInitialization գրանցված BeanPostProcessor-ներից: Այս փուլում հաճախ ստեղծվում են պրոքսի օբյեկտներ (օրինակ, տրանզակցիոնության կամ անվտանգության համար):
  7. Պատրաստ է օգտագործման համար: Օբյեկտը համարվում է լրիվ կոնֆիգուրացված և պատրաստ է օգտագործման:
  8. Կործանում:
    • Եթե բինը իրականացնում է DisposableBean, կանչվում է նրա destroy() մեթոդը:
    • Եթե նշված է կործանման մեթոդ @Bean(destroyMethod="...") կամ destroy-method XML-ում, այն կանչվում է:
    • Կանչվում է @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. Initialization (InitializingBean)
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5. InitializingBean afterPropertiesSet() կանչվեց");
        // Ինիցիալիզացիայի լոգիկա
    }

    // 5. Initialization (@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 {
        // ...
    }
}