Middle
Springде түзүлгөн объекттин жашоо циклі кандай?
sobes.tech AI
AIден жооп
- Иштөө: Spring объекттин нускамасын түзөт:
- Мөлчөмдөрдү толтуруу: Тармактар (
@Autowired,@Valueжана башка) сеттерлер же талаалар аркылуу киргизилет: - Aware интерфейстер: Эгер бин
BeanNameAware,BeanFactoryAware,ApplicationContextAwareже башка Aware-интерфейстерин иштетсе, Spring тиешелүү ыкмаларды чакырет (setBeanName,setBeanFactory,setApplicationContextжана башка), контекстти өткөрүп берет: - BeanPostProcessors (инициализацияга чейин): Инициализация ыкмаларын чакырганга чейин, катталган
BeanPostProcessor-лердинpostProcessBeforeInitializationыкмалары чакырылат: - Bean Инициализациясы:
- Эгер бин
InitializingBeanиштетсе, анынafterPropertiesSet()ыкмасы чакырылат: - Эгер
@Bean(initMethod="...")же XMLдегиinit-methodаркылуу көрсөтүлгөн ыкма бар болсо, ал да чакырылат:
- Эгер бин
- BeanPostProcessors (инициализациядан кийин): Инициализациядан кийин, катталган
BeanPostProcessor-лердинpostProcessAfterInitializationыкмалары чакырылат. Бул этапта көбүнчө прокси-объекттер түзүлөт (мисалы, транзакциялоо же коопсуздук үчүн): - Колдонууга даяр: Объект толук конфигурацияланып, колдонууга даяр деп эсептелет:
- Жок кылуу:
- Эгер бин
DisposableBeanиштетсе, анынdestroy()ыкмасы чакырылат: - Эгер
@Bean(destroyMethod="...")же XMLдегиdestroy-methodаркылуу көрсөтүлгөн ыкма бар болсо, ал да чакырылат: @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. Инициализация (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 {
// ...
}
}