You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Feign拦截器配置启动报错:找不到java.lang.String类型合格Bean

问题原因

你遇到的错误是因为**@RequiredArgsConstructor和@Value在final字段上的组合导致构造注入逻辑冲突**:

  • @RequiredArgsConstructor会自动生成包含所有final字段的构造方法,Spring容器会优先使用这个构造方法创建Bean;
  • 你在final字段上标注的@Value是字段注入注解,Spring在执行构造注入时,无法解析占位符${spring.application.name},只能尝试寻找类型为String的Bean,而容器中并没有这个类型的Bean,因此抛出NoSuchBeanDefinitionException。
解决方案

以下几种方式都可以解决问题,选其一即可:

方案1:手动编写带@Value参数的构造方法(推荐,保留final字段)

移除@RequiredArgsConstructor,手动创建构造方法并将@Value标注在构造参数上,让Spring在构造Bean时直接解析占位符注入:

public class Interceptor implements RequestInterceptor {
   
    private final String applicationName;

    public Interceptor(@Value("${spring.application.name}") String applicationName) {
        this.applicationName = applicationName;
    }

    // 实现RequestInterceptor的apply方法...
}

方案2:移除final修饰符和@RequiredArgsConstructor

去掉applicationName字段的final修饰,同时删除@RequiredArgsConstructor,让Spring通过无参构造创建Bean后,再执行字段注入:

public class Interceptor implements RequestInterceptor {
   
    @Value("${spring.application.name}")
    private String applicationName;

    // 实现RequestInterceptor的apply方法...
}

方案3:使用@ConfigurationProperties(适合多配置场景)

如果后续需要注入更多Spring配置,可以用@ConfigurationProperties替代@Value,更规范:

  1. 修改Interceptor类:
@ConfigurationProperties(prefix = "spring.application")
public class Interceptor implements RequestInterceptor {
   
    private String name; // 对应配置文件中的spring.application.name

    // 实现RequestInterceptor的apply方法...

    // 需提供getter方法(可通过Lombok的@Data注解自动生成)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 在项目启动类或任意配置类上添加注解,启用配置绑定:
@EnableConfigurationProperties(Interceptor.class)
@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
额外说明

之前添加@Component和@PropertySource无效的原因:

  • Feign客户端的configuration属性指定类时,Spring会单独实例化这个类,而非直接复用容器中已有的@Component Bean;
  • @PropertySource默认不支持YAML文件(需要额外配置),但你已经通过Spring Boot默认加载了application.yaml,所以这个注解本身是多余的。

内容的提问来源于stack exchange,提问作者Emanuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:28