问题: spring-boot 函数 ApplicationRunner.run() 是在创建所有 beans 时运行还是在实现接口 的 bean 构建时运行?
例如,给定:
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// run some logic...
}
}
@Component
pubic class OtherClass{
// ...
}
MyRunner.run() 吗
在创建 MyRunner bean 和 OtherClass bean 时运行,或
在创建 MyRunner bean 时运行,
OtherClass bean 没有创建?
我认为后者是基于https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/ApplicationRunner.html
公共接口 ApplicationRunner
接口用来表示一个 当 bean 包含在 SpringApplication 中时,它应该运行。 多个 ApplicationRunner bean 可以定义在同一个 应用程序上下文,可以使用 Ordered 接口或 @Order注解。
为什么要问这个问题? 我正在考虑在我的 spring-boot 应用程序启动时运行一些逻辑。我知道
ApplicationRunner
和 ApplicationListener<ContextRefreshedEvent>
都可以用于该目的,但不知道哪个更好。如果 ApplicationRunner.run()
可能会在未创建某些 bean 时运行,那么它对我的用例来说是不可靠的。