=== Where getApplicationStartup() actually lives (Spring Framework 7.0.9) === Injecting ApplicationContext and calling getApplicationStartup() does not compile: [ERROR] .../config/StartupBeans.java:[22,45] cannot find symbol symbol: method getApplicationStartup() location: variable context of type org.springframework.context.ApplicationContext javap says the accessor is declared one interface down, and also on the bean factory: $ javap -cp . org.springframework.context.ConfigurableApplicationContext | grep ApplicationStartup public abstract void setApplicationStartup(org.springframework.core.metrics.ApplicationStartup); public abstract org.springframework.core.metrics.ApplicationStartup getApplicationStartup(); $ javap -cp . org.springframework.beans.factory.config.ConfigurableBeanFactory | grep ApplicationStartup public abstract void setApplicationStartup(org.springframework.core.metrics.ApplicationStartup); public abstract org.springframework.core.metrics.ApplicationStartup getApplicationStartup(); === The buffering API surface (spring-boot 4.1.1) === $ javap -cp . org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup public class BufferingApplicationStartup implements org.springframework.core.metrics.ApplicationStartup { public BufferingApplicationStartup(int); public void startRecording(); public void addFilter(java.util.function.Predicate); public org.springframework.core.metrics.StartupStep start(java.lang.String); public StartupTimeline getBufferedTimeline(); public StartupTimeline drainBufferedTimeline(); } $ javap -cp . org.springframework.boot.context.metrics.buffering.StartupTimeline$TimelineEvent public class StartupTimeline$TimelineEvent { public java.time.Instant getStartTime(); public java.time.Instant getEndTime(); public java.time.Duration getDuration(); public org.springframework.core.metrics.StartupStep getStartupStep(); } Note: there is no setter for the buffer size and no Spring property that installs this. The only constructor takes the capacity, and it must be handed to SpringApplication before run(). === You do not need a @Bean method for it === Declaring one produces a startup failure, because Boot has already registered the instance as a singleton: Parameter 0 of constructor in com.ankurm.startup.web.StartupDiagnosticsEndpoint required a single bean, but 2 were found: - bufferingApplicationStartup: defined by method 'bufferingApplicationStartup' in class path resource [com/ankurm/startup/config/StartupBeans.class] - applicationStartup: a programmatically registered singleton So the correct move is to inject ApplicationStartup directly and narrow with instanceof. Injecting BufferingApplicationStartup by its concrete type compiles and works -- until somebody runs without tracking, at which point the application will not start at all.