【Springboot基础】Runner接口的使用

1、基本说明

SpringBoot中的Runner接口是用来在Spring应用启动后执行一些初始化逻辑的接口。

它是一个函数式接口,只有一个方法run(),用来定义初始化逻辑。

Runner接口的主要作用是能够让开发者在Spring应用启动之后,进行一些自己想要的初始化操作。

这里所说的Runner接口是由SpringBoot提供的,包含 ApplicationRunnerCommandLineRunner

从目录和代码层面看,这两个接口互相没有任何从属关系,且从接口内容上看,也只有入参的类型不同:

@FunctionalInterface  
public interface ApplicationRunner {  
    void run(ApplicationArguments args) throws Exception;  
}
@FunctionalInterface  
public interface CommandLineRunner {  
    void run(String... args) throws Exception;  
}

之所以将这两者放在一起讨论,是因为他们在Spring项目启动时,扮演了相似的功能角色。

使用方法也十分简单:实现 CommandLineRunner 或者 ApplicationRunner 接口,并重写un()方法即可。
在run()方法中,我们可以通过Autowired注入一些服务或数据源,并进行一些初始化操作,代码如下:

@Component
public class DataInitializer implements CommandLineRunner {

    @Autowired
    private SomeService someService;

    @Override
    public void run(String... args) throws Exception {
        // 初始化数据
        myService.initializeData();
    }
}

2、二者的区别

从包路径和接口内容两个方面来看,CommandLineRunner 与 ApplicationRunner接口整体上略有相似,但又不是完全相同。

对于二者的区别,我们可以从调用入口接口入参两个角度来进行理解:

2.1、调用入口

在Spring启动的run方法中,我们可以看到,在run方法的最后,callRunner方法里面,从Spring上下文中获取到了所有的ApplicationRunner类型和CommandLineRunner类型的Bean。

再将这些类型的Bean放到一个runner集合中,循环遍历并调用各自的run方法。

在这里插入图片描述

2.2、接口入参

ApplicationRunner接口 和 CommandLineRunner接口都是函数式接口,只有一个run()方法。

二者的区别在于参数不同。

ApplicationRunner中run()参数是ApplicationArguments对象。
在这里插入图片描述

CommandLineRunner中run()参数是数量可变的字符串。
在这里插入图片描述

Spring类型的入参我们很好理解,方法可以接收任意数量的字符串参数。

ApplicationArguments类型的入参在这里需要说明一下。

该类型是Spring Boot提供的一个类,用于获取应用程序启动时传入的命令行参数。它包含了以下信息:

1、命令行参数:包括长选项(例如 --foo)和短选项(例如 -f)。
2、非选项参数:即以空格分隔的非选项参数,例如文件名、路径等。
3、选项参数的值:如果一个选项参数需要一个值,例如 --foo=bar,那么这个值将存储在ApplicationArguments中。

使用ApplicationArguments可以轻松地获取和处理命令行参数,从而实现更加灵活的应用程序配置和启动。

以上就是帖子的全部内容啦,关注我,我会定期更新,期待与你的共同进步!

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值