Spring InitializingBean、init-method以及@PostConstruct 执行顺序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u010979642/article/details/102605966

Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:

  • 通过实现 InitializingBean 或 DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
  • 通过 元素的 init-method 或 destroy-method 属性指定初始化之后 /销毁之前调用的操作方法;
  • 在指定方法上加上 @PostConstruct 或 @PreDestroy 注解来制定该方法是在初始化之后还是销毁之前调用。
@Component
public class TaskBean {

    @Bean(initMethod = "initMethod", destroyMethod = "destroyMethod")
    public TaskService taskService() {
        return new TaskService();
    }

}
@Slf4j
public class TaskService implements InitializingBean, DisposableBean {

    public TaskService() {
        log.info("TaskService constructor execute...");
    }


    @PostConstruct
    private void postConstruct() {
        log.info("TaskService postConstruct...");
    }

    private void initMethod() {
        log.info("TaskService initMethod...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        log.info("TaskService afterPropertiesSet...");
    }



    @PreDestroy
    private void preDestroy() {
        log.info("TaskService preDestroy!!!");
    }

    private void destroyMethod() {
        log.info("TaskService destroyMethod!!!");
    }

    @Override
    public void destroy() throws Exception {
        log.info("TaskService destroy!!!");
    }
}

注意: 在 IDEA 中退出应用程序, 销毁方法执行不了,必须使用 java -jar ***.jar 才行

程序运行输出

TaskService constructor execute...
TaskService postConstruct...
TaskService afterPropertiesSet...
TaskService initMethod...

...

TaskService preDestroy!!!
TaskService destroy!!!
TaskService destroyMethod!!!

通过输出结果得知(三者的执行顺序): 构造函数 => PostConstruct => InitializingBean => initMethod

猜你喜欢

转载自blog.csdn.net/u010979642/article/details/102605966