Spring Boot ApplicationRunner.run()是否在创建所有bean时运行?

问题描述 投票:0回答:0

问题: 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 时运行,那么它对我的用例来说是不可靠的。

java spring-boot-actuator
© www.soinside.com 2019 - 2024. All rights reserved.