Middle
236
Koji je životni ciklus objekta kreiranog u Spring-u?
Одговор од АИ
sobes.tech АИ
- Instanciranje: Spring kreira instancu objekta.
- Popunjavanje svojstava: Zavisnosti (polja označena sa
@Autowired,@Valueitd.) se ubrizgavaju putem setera ili polja. - Aware interfejsi: Ako bean implementira
BeanNameAware,BeanFactoryAware,ApplicationContextAwareili druge Aware interfejse, Spring poziva odgovarajuće metode (setBeanName,setBeanFactory,setApplicationContextitd.), prosleđujući kontekst. - BeanPostProcessors (pre inicijalizacije): Pre poziva metoda inicijalizacije, pozivaju se
postProcessBeforeInitializationregistrovanihBeanPostProcessor. - Inicijalizacija beana:
- Ako bean implementira
InitializingBean, poziva mu se metodaafterPropertiesSet(). - Ako je specificirana inicijalizaciona metoda putem
@Bean(initMethod="...")iliinit-methodu XML, poziva se ta metoda.
- Ako bean implementira
- BeanPostProcessors (posle inicijalizacije): Nakon inicijalizacije, pozivaju se
postProcessAfterInitializationregistrovanihBeanPostProcessor. - Spreman za upotrebu: Objekat se smatra potpuno konfigurisan i spreman za upotrebu.
- Uništavanje:
- Ako bean implementira
DisposableBean, poziva mu se metodadestroy(). - Ako je specificirana metoda za uništavanje putem
@Bean(destroyMethod="...")ilidestroy-methodu XML, poziva se ta metoda. - Poziva se metoda označena sa
@PreDestroy.
- Ako bean implementira
- Čišćenje: Spring uklanja bean iz konteksta.
// Primer beana koji učestvuje u životnom ciklusu
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. Popunjavanje svojstava (kroz setter)
private Dependency requiredDependency;
public void setRequiredDependency(Dependency requiredDependency) {
System.out.println("2. Postavljanje zavisnosti");
this.requiredDependency = requiredDependency;
}
// Aware interfejsi
@Override
public void setBeanName(String name) {
System.out.println("3. Postavljanje imena beana: " + name);
this.beanName = name;
}
// Inicijalizacija beana (iz InitializingBean)
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("5. Pozivanje afterPropertiesSet() iz InitializingBean");
// Logika inicijalizacije
}
// @PostConstruct metoda
@PostConstruct
public void postConstructMethod() {
System.out.println("5. Pozivanje metode @PostConstruct");
// Logika inicijalizacije
}
// Prilagođeni init metod
public void customInitMethod() {
System.out.println("5. Pozivanje prilagođene init metode");
// Logika inicijalizacije
}
// Spreman za upotrebu
public void doSomething() {
System.out.println("7. Bean je spreman i radi nešto");
}
// Uništavanje (iz DisposableBean)
@Override
public void destroy() throws Exception {
System.out.println("8. Pozivanje destroy() iz DisposableBean");
// Logika čišćenja
}
// @PreDestroy metoda
@PreDestroy
public void preDestroyMethod() {
System.out.println("8. Pozivanje @PreDestroy metode");
// Logika čišćenja
}
// Prilagođeni destroy metod
public void customDestroyMethod() {
System.out.println("8. Pozivanje prilagođene destroy metode");
// Logika čišćenja
}
// Interna klasa za primer zavisnosti
public static class Dependency {
// ...
}
}