/**
* @author Zhang B H
* @create 2024-01-19 14:34
*/
@Slf4j
@Configuration
public class TestLifecycle implements BeanNameAware, BeanFactoryAware,
ApplicationContextAware, InitializingBean, DisposableBean {
public TestLifecycle() {
log.error("3. Bean Constructor");
}
@Override
public void setBeanName(String name) {
log.error("6. BeanNameAware.setBeanName()");
}
@Override
public void setBeanFactory(BeanFactory beanFactory)
throws BeansException {
log.error("7. BeanFactoryAware.setBeanFactory()");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
log.error("8. ApplicationContextAware.setApplicationContext()");
}
@Override
public void afterPropertiesSet() throws Exception {
log.error("10. InitializingBean.afterPropertiesSet()");
}
@Override
public void destroy() throws Exception {
log.error("12. InitializingBean.afterPropertiesSet()");
}
@Component
public static class TestBeanFactorPostProcessor
implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory)
throws BeansException {
log.error("1. BeanFactoryPostProcessor.postProcessBeanFactory()");
}
}
@Component
public static class TestInstantiationAwareBeanPostProcessor
implements InstantiationAwareBeanPostProcessor {
@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
throws BeansException {
log.error("2. InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()");
return InstantiationAwareBeanPostProcessor.super.postProcessBeforeInstantiation(beanClass, beanName);
}
@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName)
throws BeansException {
log.error("4. InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()");
return InstantiationAwareBeanPostProcessor.super.postProcessAfterInstantiation(bean, beanName);
}
@Override
public PropertyValues postProcessProperties(
PropertyValues pvs, Object bean, String beanName)
throws BeansException {
log.error("5. InstantiationAwareBeanPostProcessor.postProcessProperties()");
return InstantiationAwareBeanPostProcessor.super.postProcessProperties(pvs, bean, beanName);
}
}
@Component
public static class TestBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
log.error("9. BeanPostProcessor.postProcessBeforeInitialization()");
return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
log.error("11. BeanPostProcessor.postProcessBeforeInitialization()");
return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(TestLifecycle.class);
}
}