Middle
Kāda ir Spring izveidota objekta dzīves cikls?
sobes.tech AI
Atbilde no AI
- Izveidot: Spring izveido objekta piemēru:
- Aizpildīt īpašības: atkarības (
@Autowired,@Valueun citi) tiek ievadītas caur sētām vai laukiem: - Aware saskarnes: Ja bīns realizē
BeanNameAware,BeanFactoryAware,ApplicationContextAwarevai citas Aware saskarnes, Spring izsauc atbilstošās metodes (setBeanName,setBeanFactory,setApplicationContextun citas), nododot kontekstu: - BeanPostProcessors (pirms inicializācijas): Pirms inicializācijas metožu izsaukšanas tiek izsaukti reģistrētie
BeanPostProcessorpostProcessBeforeInitializationmetodes: - Bean inicializācija:
- Ja bīns realizē
InitializingBean, tiek izsaukts tāafterPropertiesSet()metodes: - Ja ir norādīta inicializācijas metode
@Bean(initMethod="...")vaiinit-methodXML, tā tiek izsaukta:
- Ja bīns realizē
- BeanPostProcessors (pēc inicializācijas): Pēc inicializācijas tiek izsaukti reģistrētie
BeanPostProcessorpostProcessAfterInitializationmetodes. Šajā posmā bieži tiek izveidoti proxy objekti (piemēram, transakcijām vai drošībai): - Gatavs lietošanai: Objekts tiek uzskatīts par pilnībā konfigurētu un gatavu lietošanai:
- Iznīcināšana:
- Ja bīns realizē
DisposableBean, tiek izsaukts tādestroy()metodes: - Ja ir norādīta iznīcināšanas metode
@Bean(destroyMethod="...")vaidestroy-methodXML, tā tiek izsaukta: - Tiek izsaukta
@PreDestroyatzīmētā metode:
- Ja bīns realizē
- Tīrīšana: Spring noņem bīnu no konteksta:
// Piemēra bīns, kas piedalās dzīves ciklā
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. Savybju aizpildīšana (caur sētām)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Ievieto atkarību");
this.requiredDependency = requiredDependency;
}
// 3. Aware saskarnes
@Override
public void setBeanName(String name) {
System.out.println("3. Bīna nosaukums iestatīts: " + name);
this.beanName = name;
}
// 5. Inicializācija (InitializingBean)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. InitializingBean afterPropertiesSet() izsaukts");
// Inicializācijas loģika
}
// 5. @PostConstruct (Inicializācija)
@PostConstruct
public void postConstructMethod() {
System.out.println("5. @PostConstruct metode izsaukta");
// Inicializācijas loģika
}
// 5. Lietotāja initMethod
public void customInitMethod() {
System.out.println("5. Lietotāja init metode izsaukta");
// Inicializācijas loģika
}
// 7. Gatavs lietošanai
public void doSomething() {
System.out.println("7. Bīns ir gatavs un dara kaut ko");
}
// 8. Iznīcināšana (DisposableBean)
@Override
public void destroy() throws Exception {
System.out.println("8. DisposableBean destroy() izsaukts");
// Tīrīšanas loģika
}
// 8. @PreDestroy (Iznīcināšana)
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. @PreDestroy metode izsaukta");
// Tīrīšanas loģika
}
// 8. Lietotāja destroyMethod
public void customDestroyMethod() {
System.out.println("8. Lietotāja destroy metode izsaukta");
// Tīrīšanas loģika
}
// Iekšējā klase atkarībai
public static class Dependency {
// ...
}
}