空继承Feign配置类无法加载父类Bean的问题求助
问题:Feign空继承配置类无法加载父类Bean
背景
我维护多个配置不同的Feign客户端,通用配置类如下:
public class FeignLogConfig { @Bean public LogOkHttpInterceptor LogOkHttpInterceptor() { //*自定义拦截器* return new LogOkHttpInterceptor(); } @Bean public feign.okhttp.OkHttpClient okHttpClient(LogOkHttpInterceptor interceptor) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addInterceptor(interceptor); return new feign.okhttp.OkHttpClient(builder.build()); } }
正常生效的配置场景
这个通用配置类可以通过继承扩展,比如下面这个添加了重试器的配置类:
public class FeignRetryerConfig extends FeignLogConfig { @Bean public Retryer retryer() { return new Retryer.Default(100, 500, 5); } }
使用该配置的Feign客户端能正常加载拦截器:
@FeignClient(value = "retryClient", url = url, configuration = FeignRetryerConfig.class)
直接使用父类FeignLogConfig作为配置的客户端也能正常工作:
@FeignClient(value = "logClient", url = url, configuration = FeignLogConfig.class)
异常场景:空继承配置类失效
但如果定义一个空的继承类:
public class FeignEmptyConfig extends FeignLogConfig {}
将其作为配置的Feign客户端却无法加载LogOkHttpInterceptor:
@FeignClient(value = "emptyClient", url = url, configuration = FeignEmptyConfig.class)
我查阅了Spring Cloud Feign官方文档,未找到相关原因说明,不确定是否遗漏了必要配置项。
补充:@Import方式可解决问题
后续排查发现这可能和Feign本身无关,而是Spring配置聚合机制的问题。同样是空配置类,改用@Import引入父类配置就能正常生效:
@Import(FeignLogConfig.class) public class EmptyFeignConfig {}
内容的提问来源于stack exchange,提问作者dcolazin
相关产品推荐
相关产品推荐

