Spring @Bean方法内lambda的factory参数来源是什么
factory参数来源解答 - 首先明确:该
factory不是你手动通过依赖注入获取的对象,它是Spring Cloud框架在自动配置流程中自动传入的参数。 - 你定义的
@Bean返回值是Customizer<Resilience4JCircuitBreakerFactory>类型的定制器,这个函数式接口的唯一方法customize的签名,就是接收一个Resilience4JCircuitBreakerFactory类型的入参,你写的lambda表达式就是对这个方法的实现,factory就是这个方法的形参。 - 完整执行逻辑如下:
- Spring Boot启动时的自动配置模块会先初始化
Resilience4JCircuitBreakerFactory的基础实例 - 随后框架会扫描容器中所有针对
Resilience4JCircuitBreakerFactory的Customizer类型Bean - 框架逐个调用这些Customizer的
customize方法,把前一步创建好的、还未完成最终配置的工厂实例作为实参传给factory形参,执行你写的配置逻辑(设置全局超时时间、默认断路器配置等)
- Spring Boot启动时的自动配置模块会先初始化
注意:不要尝试在
defaultCustomizer方法的入参中注入Resilience4JCircuitBreakerFactory,此时该工厂实例还处于配置阶段,尚未完成初始化,强行注入会引发上下文启动异常。
你参考的示例代码如下:
@Bean public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() { return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id) .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build()) .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults()) .build()); }
内容的提问来源于stack exchange,提问作者Goozo
相关产品推荐
相关产品推荐

