spring boot启动源码分析 afterRefresh

 1     protected void afterRefresh(ConfigurableApplicationContext context,
 2             ApplicationArguments args) {
 3         callRunners(context, args);
 4     }
 5 
 6     private void callRunners(ApplicationContext context, ApplicationArguments args) {
 7         List<Object> runners = new ArrayList<Object>();
 8         runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
 9         runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
10         AnnotationAwareOrderComparator.sort(runners);
11         for (Object runner : new LinkedHashSet<Object>(runners)) {
12             if (runner instanceof ApplicationRunner) {
13                 callRunner((ApplicationRunner) runner, args);
14             }
15             if (runner instanceof CommandLineRunner) {
16                 callRunner((CommandLineRunner) runner, args);
17             }
18         }
19     }
20 
21     private void callRunner(ApplicationRunner runner, ApplicationArguments args) {
22         try {
23             (runner).run(args);
24         }
25         catch (Exception ex) {
26             throw new IllegalStateException("Failed to execute ApplicationRunner", ex);
27         }
28     }

上下文刷新结束后,可以实现ApplicationRunner或者CommandLineRunner接口来实现上下文成功初始化后的一些操作。

最终调用

1 listeners.finished(context, null);

通知所有监听器,上下文初始化结束。

 

applicationrunner commandlinerunner两种runner除了参数类型不一样,其他的没有区别,执行顺序也是一起排序使用order控制。使用的排序规则是AnnotationAwareOrderComparator。

转载于:https://www.cnblogs.com/avalon-merlin/p/10552022.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值