SpringBoot初始化几大招式,看了终于明白了( 二 )


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

SpringBoot初始化几大招式,看了终于明白了

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

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

文章插图
 
执行这个Bean的初始化,会发现日志输出如下:
SpringBoot初始化几大招式,看了终于明白了

文章插图
 
所以,这几种初始化的顺序为:
  1. 构造器方法
  2. @PostConstruct 注解方法
  3. InitializingBean的afterPropertiesSet()
  4. Bean定义的initMethod属性方法
来源:https://mp.weixin.qq.com/s/XJ8wGiN9LTYA_i7Z1YB3CQ




推荐阅读