JobLauncherApplicationRunner运行原理及Bean注册、@Autowired使用疑问
JobLauncherApplicationRunner运行原理与疑问解答
核心运行原理
JobLauncherApplicationRunner是Spring Boot为整合Spring Batch提供的启动执行器,核心逻辑为:在Spring Boot应用上下文完全刷新完成后,自动检索上下文内所有Job类型的Bean,通过SimpleJobLauncher按顺序批量执行,执行时会把应用启动参数作为Job参数传入。
疑问解答
1. 类无托管注解为何能使用@Autowired注入
@Autowired注解的生效逻辑是由Spring容器对其管理的Bean实例统一处理,和类本身是否标注@Component等托管注解没有直接关系。只要该类的实例是由Spring容器负责创建、纳入容器生命周期管理的,Spring就会自动扫描实例内的@Autowired、@Value等注解,完成依赖注入。
JobLauncherApplicationRunner的实例本身就是Spring通过配置类的@Bean方法创建的,所以内部的@Autowired自然可以正常生效。
2. 该类如何被注册为Spring Bean
JobLauncherApplicationRunner本身没有标注任何托管注解,它的Bean注册是由Spring Boot的自动装配机制完成的:
- 该类的注册逻辑定义在Spring Boot批量自动配置类
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration的内部配置类JobLauncherApplicationRunnerConfiguration中 - 该配置类会在满足如下条件时生效:
- 类路径下存在Spring Batch核心类,项目已引入Spring Batch依赖
- 应用上下文内存在至少一个
Job类型的Bean - 配置项
spring.batch.job.enabled的值为true(该配置默认值为true)
- 满足条件后,配置类中标注
@Bean的方法会创建JobLauncherApplicationRunner的实例,注册到Spring容器中,自然会被Spring Boot识别为ApplicationRunner接口的实现类,在启动完成后调用run方法。
内容的提问来源于stack exchange,提问作者Hatef Alipoor
相关产品推荐
相关产品推荐

