zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    mysql数据库
    Mysql之sql语句操作
    mysql修改root密码的多种方法
    kvm虚拟化
    清华AIOps算法:KPI聚类
    有点扯的预测方法
    内网安全运营的逻辑体系架构
    SpringBoot定时消费Kafka消息
    kafka的consumer消费能力很低的情况下的处理方案
    Kafka_Kafka 消费者 偏移量 与 积压 查询脚本 kafka-consumer-groups.sh
  • 原文地址:https://www.cnblogs.com/avalon-merlin/p/10552022.html
Copyright © 2011-2022 走看看