CommandLineRunner:接口的定义很简单,只提供了一个名为 run()的方法。这个主要用于在应用程序启动后执行一些特定的代码——在run()房里的内容。
他有个类似的接口——ApplicationRunner,也提供了run()方法。但是参数不同。
他们是何时被启动的:
我么知道项目启动主要靠Application:
public static void main(String[] args) {
SpringApplication.run(LoggingServiceApplication.class, args);
}
点进去看源码,发现这段:
listeners.started(context);
callRunners(context, applicationArguments);
再点进去看源码:在这里我们能看到这个这两个接口类型的启动。
private void callRunners(ApplicationContext context, ApplicationArguments args) {
List<Object> runners = new ArrayList<>();
runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
AnnotationAwareOrderComparator.sort(runners);
for (Object runner : new LinkedHashSet<>(runners)) {
if (runner instanceof ApplicationRunner) {
callRunner((ApplicationRunner) runner, args);
}
if (runner instanceof CommandLineRunner) {
callRunner((CommandLineRunner) runner, args);
}
}
}
SpringBoot中如何在加载完Bean实例后进行一些操作,CommandLineRunner和ApplicationRunner
最新推荐文章于 2024-06-23 16:31:04 发布