Spring AnnotationConfigApplicationContext中start方法传入步骤名称的作用是什么
StartupStep#start方法传入的名称参数作用说明
你提到的对应代码如下:
public AnnotationConfigApplicationContext() { StartupStep createAnnotatedBeanDefReader = this.getApplicationStartup().start("spring.context.annotated-bean-reader.create"); this.reader = new AnnotatedBeanDefinitionReader(this); createAnnotatedBeanDefReader.end(); this.scanner = new ClassPathBeanDefinitionScanner(this); }
该参数存在的原因如下:
- 这个参数是
StartupStep接口的统一契约要求,设计上就要求调用start方法时必须传入当前启动步骤的唯一标识,和具体实现类无关。 - 你观察到的参数无实际作用,是
DefaultApplicationStartup本身的定位决定的:它是Spring默认提供的无操作占位实现,目的是在未开启额外可观测性能力时不产生额外性能开销,所以内部确实没有处理该参数的逻辑。 - 当你替换为其他有实际功能的
StartupStep实现时,这个参数就会生效:比如Spring自带的FlightRecorderApplicationStartup会将该名称作为JFR事件的标识,对接链路追踪系统的实现会将该名称作为Span的名称,用来统计、筛选对应启动阶段的耗时、执行状态等可观测性数据。 - 代码中传入的
spring.context.annotated-bean-reader.create是Spring官方预定义的标准化启动步骤标识,所有兼容Spring启动可观测性的实现都可以识别该标识,为用户提供统一的启动阶段分析能力。
内容的提问来源于stack exchange,提问作者WangZiBin
相关产品推荐
相关产品推荐

