import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class MyComponent implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet from InitializingBean");
}
@PostConstruct
public void onPostConstruct() {
System.out.println("onPostConstruct");
}
@PreDestroy
public void onPreDestroy() {
System.out.println("onPreDestroy");
}
@Override
public void destroy() throws Exception {
System.out.println("destroy from DisposableBean ");
}
}
the sequence is:
onPostConstruct
afterPropertiesSet from InitializingBean
onPreDestroy
destroy from DisposableBean
and you can intercept instantiatio of every bean with a BPP :
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CustomBeanPostProcessor implements BeanPostProcessor {
public CustomBeanPostProcessor() {
System.out.println("0. Spring calls constructor");
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println(bean.getClass() + "" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println(bean.getClass() + "" + beanName);
return bean;
}
}