Middle
Ի՞նչ է Spring-ում ստեղծված օբյեկտի կյանքի ցիկլը։
sobes.tech AI
Պատասխան AI-ից
- Ստեղծում: Spring-ը ստեղծում է օբյեկտի օրինակ:
- Նպաստների լրացում: Զարգացվում են կախվածությունները (
@Autowired,@Valueև այլն) սեթերների կամ դաշտերի միջոցով: - Aware ինտերֆեյսներ: Եթե բինը իրականացնում է
BeanNameAware,BeanFactoryAware,ApplicationContextAwareկամ այլ Aware-ինտերֆեյսներ, Spring-ը կանչում է համապատասխան մեթոդները (setBeanName,setBeanFactory,setApplicationContextև այլն), փոխանցելով կոնտեքստը: - BeanPostProcessors (նախագծման նախորդ փուլ): Նախքան մեթոդների կանչումը, կանչվում է
postProcessBeforeInitializationգրանցվածBeanPostProcessor-ներից: - Բին Initialization:
- Եթե բինը իրականացնում է
InitializingBean, կանչվում է նրաafterPropertiesSet()մեթոդը: - Եթե նշված է initialization մեթոդը
@Bean(initMethod="...")կամinit-methodXML-ում, այն կանչվում է:
- Եթե բինը իրականացնում է
- BeanPostProcessors (նախագծման հետո): Initialization-ից հետո կանչվում է
postProcessAfterInitializationգրանցվածBeanPostProcessor-ներից: Այս փուլում հաճախ ստեղծվում են պրոքսի օբյեկտներ (օրինակ, տրանզակցիոնության կամ անվտանգության համար): - Պատրաստ է օգտագործման համար: Օբյեկտը համարվում է լրիվ կոնֆիգուրացված և պատրաստ է օգտագործման:
- Կործանում:
- Եթե բինը իրականացնում է
DisposableBean, կանչվում է նրաdestroy()մեթոդը: - Եթե նշված է կործանման մեթոդ
@Bean(destroyMethod="...")կամdestroy-methodXML-ում, այն կանչվում է: - Կանչվում է
@PreDestroyնշած մեթոդը:
- Եթե բինը իրականացնում է
- Անջատում: 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 {
// ...
}
}