Middle
Mi az életciklusa egy Spring-ben létrehozott objektumnak?
sobes.tech MI
Válasz az MI-től
- Létrehozás: A Spring példányt hoz létre az objektumból.
- Tulajdonságok feltöltése: A függőségek (pl.
@Autowired,@Valuejelölésekkel ellátott mezők) injektálódnak settereken vagy mezőkön keresztül. - Aware interfészek: Ha a bean implementálja a
BeanNameAware,BeanFactoryAware,ApplicationContextAwarevagy más Aware interfészeket, a Spring meghívja a megfelelő metódusokat (setBeanName,setBeanFactory,setApplicationContextstb.), átadva a kontextust. - BeanPostProcessors (az inicializálás előtt): Az inicializálás előtt meghívódnak a regisztrált
BeanPostProcessor-ekpostProcessBeforeInitializationmetódusai. - Bean inicializálása:
- Ha a bean implementálja az
InitializingBean-t, akkor meghívódik azafterPropertiesSet()metódusa. - Ha az
@Bean(initMethod="...")vagy az XML-beninit-methodvan megadva, akkor ez a metódus kerül meghívásra.
- Ha a bean implementálja az
- BeanPostProcessors (az inicializálás után): Az inicializálás után meghívódnak a
postProcessAfterInitializationmetódusok. Ebben a szakaszban gyakran proxy-k (pl. tranzakciókezelés vagy biztonság) jönnek létre. - Kész a használatra: Az objektum teljesen konfigurált és használatra kész.
- Megsemmisítés:
- Ha a bean implementálja a
DisposableBean-t, akkor meghívódik adestroy()metódusa. - Ha az
@Bean(destroyMethod="...")vagy az XML-bendestroy-methodvan megadva, akkor ez a metódus kerül meghívásra. - Meghívódik a
@PreDestroy-vel jelölt metódus.
- Ha a bean implementálja a
- Tisztítás: A Spring eltávolítja a bean-t a kontextusból.
// Példa egy életciklusban részt vevő bean-re
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. Tulajdonságok feltöltése (setterrel)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Függőség beállítása");
this.requiredDependency = requiredDependency;
}
// Aware interfészek
@Override
public void setBeanName(String name) {
System.out.println("3. Bean név beállítása: " + name);
this.beanName = name;
}
// Bean inicializálása (az InitializingBean-ből)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. InitializingBean afterPropertiesSet() hívása");
// Inicializációs logika
}
// @PostConstruct módszer
@PostConstruct
public void postConstructMethod() {
System.out.println("5. @PostConstruct módszer hívása");
// Inicializációs logika
}
// Egyéni initMethod
public void customInitMethod() {
System.out.println("5. Egyéni init módszer hívása");
// Inicializációs logika
}
// Kész a használatra
public void doSomething() {
System.out.println("7. A bean készen áll és csinál valamit");
}
// Megsemmisítés (DisposableBean-ből)
@Override
public void destroy() throws Exception {
System.out.println("8. DisposableBean destroy() hívása");
// Tisztítási logika
}
// @PreDestroy módszer
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. @PreDestroy módszer hívása");
// Tisztítási logika
}
// Egyéni destroyMethod
public void customDestroyMethod() {
System.out.println("8. Egyéni destroy módszer hívása");
// Tisztítási logika
}
// Belső osztály a függőség példájához
public static class Dependency {
// ...
}
}