Skip to content

IocBeamLifeCycle

此文集中了 IoC 与 Bean 的生命周期。可更好的掌握 Springboot 的启动的销毁的过程,更利于复用 Spring 的勾子完成一些特定的任务。

生命周期示例

java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Configuration
public class LifeCycleDemo implements InitializingBean, DisposableBean, BeanPostProcessor {

    private static final Logger logger = LoggerFactory.getLogger(LifeCycleDemo.class);

    @PostConstruct
    public void postConstruct() {
        // 启动前全局执行一次
        logger.info("1. postConstruct");
    }

    @Override
    public void afterPropertiesSet() {
        // 当前 bean 初始化后执行一次
        logger.info("2. afterPropertiesSet");
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        // 每个 bean 都会执行一次
        logger.info("3. postProcessBeforeInitialization: {}, {}",bean.getClass().getName() ,beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        // 每个 bean 都会执行一次
        logger.info("4. postProcessAfterInitialization: {}, {}",bean.getClass().getName() ,beanName);
        return bean;
    }

    @PreDestroy
    public void preDestroy() {
        // 销毁 jvm 前执行一次
        logger.info("5. LifeCycleDemo.preDestroy");
    }

    @Override
    public void destroy() {
        // 销毁当前 bean 前执行一次
        logger.info("6. LifeCycleDemo.destroy");
    }

}

Released under the MIT License.