bean 的生命周期
image.png
image.png
容器的生命周期
SmartInitializingSingleton、SmartLifecycle、Lifecycle
相同点:
SmartInitializingSingleton和Lifecycle、SmartLifecycle都是在所有的单实例bean创建之后执行。
不同点:
SmartInitializingSingleton优先于Lifecycle、SmartLifecycle执行。
SmartInitializingSingleton只有一个afterSingletonsInstantiated方法。而Lifecycle有start,stop,isRunning等方法。
多个SmartInitializingSingleton实现之间无法排序控制执行的顺序,而SmartLifecycle实现了Phased接口,可以通过int getPhase()控制执行循序。
SmartInitializingSingleton之间可以通过@DependsOn来控制执行顺序,但这是由Spring中@DependsOn注解的作用及原理来实现的. 并不是对SmartInitializingSingleton做了排序。
在springboot中还可以使用ApplicationRunner、CommandLineRunner
CommandLineRunner 和 ApplicationRunner 的作用是相同的。
不同之处在于 CommandLineRunner 接口的 run() 方法接收 String 数组作为参数,即是最原始的参数,没有做任何处理;而 ApplicationRunner 接口的 run() 方法接收 ApplicationArguments 对象作为参数,是对原始参数做了进一步的封装。
通常用法
image.png