栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CommandLineRunner运行原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CommandLineRunner运行原理

CommandLineRunner的主要作用是在项目启动时初始化某些资源。

那么spring boot是怎么做到的?

在启动时初始化,那么目标直接定位在spring boot启动类中的代码,所以先跟进spring boot启动类,启动代码如下:

SpringApplication.run(Application.class, args);

跟进run方法中,会看到一个callRunners方法,如下:

跟进callRunners方法中,方法如下:

 private void callRunners(ApplicationContext context, ApplicationArguments args) {
        List runners = new ArrayList();
        runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
        runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
        AnnotationAwareOrderComparator.sort(runners);
        Iterator var4 = (new LinkedHashSet(runners)).iterator();

        while(var4.hasNext()) {
            Object runner = var4.next();
            if (runner instanceof ApplicationRunner) {
                this.callRunner((ApplicationRunner)runner, args);
            }

            if (runner instanceof CommandLineRunner) {
                this.callRunner((CommandLineRunner)runner, args);
            }
        }

    }
 

可以发现排序后,最后会遍历,调用callRunner方法,跟进callRunner方法,如下:

 private void callRunner(CommandLineRunner runner, ApplicationArguments args) {
        try {
            runner.run(args.getSourceArgs());
        } catch (Exception var4) {
            throw new IllegalStateException("Failed to execute CommandLineRunner", var4);
        }
    }

会发现这里的runner.run方法,其实就是CommandLineRunner对象在调用自身的run方法,因此就会执行到我们自定义的CommandLineRunner子类中的初始化逻辑。

根据以上思路打上断点,即可验证以上的分析是否正确了。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号