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 {
// ...
}
}