这里的run方法会在Spring 上下文初始化完成后执行,同时会传入应用的启动参数 。如下面的代码:

文章插图
此外,对于多个CommandLineRunner的情况下可以使用@Order注解来控制它们的顺序 。
7、 ApplicationRunner与 CommandLineRunner接口类似, Spring boot 还提供另一个ApplicationRunner 接口来实现初始化逻辑 。不同的地方在于 ApplicationRunner.run()方法接受的是封装好的ApplicationArguments参数对象,而不是简单的字符串参数 。

文章插图
ApplicationArguments对象提供了一些非常方便的方法,可以用来直接获取解析后的参数,比如:
java -jar application.jar --debug --ip=xxxx此时通过 ApplicationArguments的getOptionNames就会得到["debug","ip"]这样的值 。测试代码下面,通过一个小测试来演示几种初始化方法的执行次序 。
按如下代码实现一个复合式的Bean:

文章插图
执行这个Bean的初始化,会发现日志输出如下:

文章插图
所以,这几种初始化的顺序为:
- 构造器方法
- @PostConstruct 注解方法
- InitializingBean的afterPropertiesSet()
- Bean定义的initMethod属性方法
来源:https://mp.weixin.qq.com/s/XJ8wGiN9LTYA_i7Z1YB3CQ
推荐阅读
- SpringBoot如何用Session共享实现分布式部署?
- SpringBoot运行源码分析:Spring应用上下文准备
- 喝普洱茶的几大禁忌,喝胖大海的禁忌与作用
- Springboot 实现数据库备份还原
- 基于Springboot的权限管理系统
- 玩转SpringBoot之整合 shiro 权限框架
- SpringBoot-登录验证码实现
- 大牛教大家如何用SpringBoot技术快速实现天气预报系统
- SpringBoot OSS 整合全过程
- 依法治校是党的几大提出的?
