Skip to content

Latest commit

 

History

History
104 lines (80 loc) · 3.91 KB

Bean的生命周期.md

File metadata and controls

104 lines (80 loc) · 3.91 KB

Spring bean 的生命周期

概述

Spring bean 生命周期

  1. 注入属性
  2. Aware 的 setter 方法注入资源
  3. BeanPostProcessor 进行初始化前后的处理(BeanPostProcessor实现类不能处理 BeanPostProcessor实现类)
  4. @PostConstruct
  5. @PreDestroy

测试类

boot-init 项目中, BeanLifeCycleAllInOne,AfterBeanInitial

@Slf4j
@Component
public class BeanLifeCycleAllInOne implements BeanNameAware, ApplicationContextAware, BeanFactoryAware, EnvironmentAware, ResourceLoaderAware {

    @Override
    public void setBeanName(String name) {
        log.info("BeanNameAware.setBeanName -- {}", name);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        log.info("ApplicationContextAware.setApplicationContext");
    }


    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        log.info("BeanFactoryAware.setBeanFactory");
    }

    @Override
    public void setEnvironment(Environment environment) {
        log.info("EnvironmentAware.setEnvironment");
    }


    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        log.info("ResourceLoaderAware.setResourceLoader");
    }

    @PostConstruct
    public void postConstruct() {
        log.info("BeanLifeCycleAllInOne.postConstruct");
    }

    @PreDestroy
    public void preDestroy() {
        log.info("BeanLifeCycleAllInOne.preDestroy");
    }
}
@Slf4j
@Component
public class AfterBeanInitial implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (BeanLifeCycleAllInOne.class.getSimpleName().equalsIgnoreCase(beanName)) {
            log.info("AfterBeanInitial.postProcessBeforeInitialization -- {}", beanName);
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (BeanLifeCycleAllInOne.class.getSimpleName().equalsIgnoreCase(beanName)) {
            log.info("AfterBeanInitial.postProcessAfterInitialization -- {}", beanName);
        }
        return bean;
    }
}

测试输出

2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : BeanNameAware.setBeanName -- beanLifeCycleAllInOne
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : BeanFactoryAware.setBeanFactory
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : EnvironmentAware.setEnvironment
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : ResourceLoaderAware.setResourceLoader
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : ApplicationContextAware.setApplicationContext
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.lifecycle.bean.AfterBeanInitial    : AfterBeanInitial.postProcessBeforeInitialization -- beanLifeCycleAllInOne
2019-09-01 11:05:36.426  INFO 53094 --- [           main] m.r.b.l.bean.BeanLifeCycleAllInOne       : BeanLifeCycleAllInOne.postConstruct
2019-09-01 11:05:36.427  INFO 53094 --- [           main] m.r.b.lifecycle.bean.AfterBeanInitial    : AfterBeanInitial.postProcessAfterInitialization -- beanLifeCycleAllInOne

...

2019-09-01 11:06:57.845  INFO 53094 --- [      Thread-16] m.r.b.l.bean.BeanLifeCycleAllInOne       : BeanLifeCycleAllInOne.preDestroy

参考

  1. Java 程序员必备的一些流程图 - 芋道源码
  2. Interface Aware