springBoot提供这两个接口的问题是在容器加载完成之后执行一些动作如:处理某些特殊业务等。
不同之处在于:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。
当接口有多个实现类时,提供了@Order(value=整数值)注解实现从小到大依次自定义顺序执行,也可以实现Ordered接口来自定义顺序。
代码示例:优先吧
CommandLineRunner
@Component
@Order(value = 1)
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("-----------------MyCommandLineRunner ---------------------");
}
}
ApplicationRunner
@Component
@Order(value = 2)
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(args);
System.out.println("---------------MyApplicationRunner --------------------");
}
}