springboot的bean的声明周期

发布时间 2023-09-11 16:29:38作者: xiuer211
  1. 创建对象
  2. 属性填充
  3. aware接口的对应方法
  4. init-method方法(@PostConstruct)
  5. initialingBean接口的方法
  6. BeanPostProcessor的前置方法
  7. BeanPostProcessor的后置方法
  8. DisposableBean的distory方法

测试对象

@Component
public class TestController implements BeanNameAware,InitializingBean, BeanPostProcessor,  DisposableBean {
    @Override
    public void setBeanName(String s) {
        System.out.println("setBeanName   "+s);
    }
    @PostConstruct
    public void init() {
        System.out.println("init");
        // ...
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet");
    }
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization");
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("destroy");
    }
}

结果

setBeanName   testController
init
afterPropertiesSet
postProcessBeforeInitialization
postProcessAfterInitialization
重复出现postProcessBeforeInitialization,postProcessAfterInitialization
destroy