Middle
Aký je životný cyklus objektu vytvoreného v Spring?
sobes.tech AI
Odpoveď od AI
- Inštancovanie: Spring vytvorí inštanciu objektu.
- Napĺňanie vlastností: Závislosti (polia označené s
@Autowired,@Valueatď.) sa injektujú cez setter alebo polia. - Aware rozhrania: Ak bean implementuje
BeanNameAware,BeanFactoryAware,ApplicationContextAwarealebo iné Aware rozhrania, Spring volá príslušné metódy (setBeanName,setBeanFactory,setApplicationContextatď.), odovzdávajúc kontext. - BeanPostProcessors (pred inicializáciou): Pred volaním inicializačných metód sa volajú
postProcessBeforeInitializationregistrovanýchBeanPostProcessor. - Inicializácia beanu:
- Ak bean implementuje
InitializingBean, volá sa jeho metódaafterPropertiesSet(). - Ak je špecifikovaná inicializačná metóda cez
@Bean(initMethod="...")aleboinit-methodv XML, volá sa táto metóda.
- Ak bean implementuje
- BeanPostProcessors (po inicializácii): Po inicializácii sa volajú
postProcessAfterInitializationregistrovanýchBeanPostProcessor. - Pripravené na použitie: Objekt je považovaný za úplne nakonfigurovaný a pripravený na použitie.
- Zničenie:
- Ak bean implementuje
DisposableBean, volá sa jeho metódadestroy(). - Ak je špecifikovaná metóda na zničenie cez
@Bean(destroyMethod="...")alebodestroy-methodv XML, volá sa táto metóda. - Volá sa metóda označená s
@PreDestroy.
- Ak bean implementuje
- Upratovanie: Spring odstráni bean z kontextu.
// Príklad beanu, ktorý sa zúčastňuje na životnom cykle
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. Napĺňanie vlastností (cez setter)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Nastavenie závislosti");
this.requiredDependency = requiredDependency;
}
// Aware rozhrania
@Override
public void setBeanName(String name) {
System.out.println("3. Nastavenie mena beanu: " + name);
this.beanName = name;
}
// Inicializácia beanu (z InitializingBean)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. Volanie afterPropertiesSet() z InitializingBean");
// Logika inicializácie
}
// @PostConstruct metóda
@PostConstruct
public void postConstructMethod() {
System.out.println("5. Volanie metódy @PostConstruct");
// Logika inicializácie
}
// Vlastná init metóda
public void customInitMethod() {
System.out.println("5. Volanie vlastnej init metódy");
// Logika inicializácie
}
// Pripravené na použitie
public void doSomething() {
System.out.println("7. Bean je pripravený a robí niečo");
}
// Zničenie (z DisposableBean)
@Override
public void destroy() throws Exception {
System.out.println("8. Volanie destroy() z DisposableBean");
// Logika čistenia
}
// @PreDestroy metóda
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. Volanie @PreDestroy metódy");
// Logika čistenia
}
// Vlastná destroy metóda
public void customDestroyMethod() {
System.out.println("8. Volanie vlastnej destroy metódy");
// Logika čistenia
}
// Vnútorná trieda pre príklad závislosti
public static class Dependency {
// ...
}
}