2022-6月更文挑战6-利用CommandLineRunner接口实现启动阶段初始化

126 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

利用CommandLineRunner接口实现启动阶段初始化

前文

本文内容主要是对于接口CommandLineRunner的一些介绍及应用,该接口简单来讲主要是实现在启动阶段进行内容的预加载功能,保证数据的初始化操作。

接口内容

该接口是spring框架所提供的接口,当使用时需要满足一下两点要求:

  • 需要使用类对接口进行实现
  • 需要将类对象交给spring进行bean管理

该接口主要的内容主要是保证当bean对象交给spring管理后,能够进行一个固定方法的执行。而该方法也就是在实现接口的过程中,需要重写run方法。当spring进行bean管理时,首先会进行bean的创建。所有bean创建结束时,会统一进行一个runner方法的调用,也就是在springApplication中,当然这也就是对于run方法的统一调用。按照这种方式,也就可以完成在初始化阶段进行数据预加载的功能。

使用方法

@Component
@Order(1)
public class TestCommandLine implements CommandLineRunner {
    public TestCommandLine() {
        System.out.println("construct");
    }

    @PostConstruct
    public void testPostConstruct(){
        System.out.println("test post construct");
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("test command line");
    }
}

上述为一段简单的接口使用代码。在完成接口的继承后,需要对于run方法进行重写。而上述代码的执行顺序,则是先进行构造方法的执行,进行bean对象的创建。在该方法执行完毕后,会立即执行@PostConstruct注解对应方法中的逻辑。而该代码执行完毕后,也就是所有bean对象都创建完成后,才会统一进行run回调方法的执行。也就是我们可以认为,run中的回调代码为上述预加载代码中的最后一个过程。

当存在多个类对于该接口进行继承时,可以通过order注解进行顺序的指定。order中指定的数字越小,表示该对象执行的优先级越高,也就能够变相的决定了初始化阶段的执行顺序。

该接口的作用明显与PostConstruct注解内容类似,区别在于postConstruct与该接口的执行顺序不同,注解主要还是针对于bean对象的初始化。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。