ApplicationRunner & CommandLineRunner
Spring容器启用后可以通过这两个Runner进行一些初始化处理。如果需要添加Runner只需要实现ApplicationRunner接口或CommandLineRunner接口,并将其添加到容器即可。
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);
}
}
}
它的执行是在容器所有bean完全加载后执行的,因此不会出现由于bean尚未完成创建导致的错误。