首页 > 解决方案 > SpringBoot 应用程序不自动装配字段

问题描述


我确实有看起来像这样的 ServiceImpl:

@Service
@RequiredArgsConstructor
public class ServiceAImpl implements ServiceA {
private final String fieldA;
@Override 
public boolean isFieldA(String text){
return fieldA.equals(text);
}

我想从 application.yml 向 Application.java 中的 fieldA 注入一个字段值,如下所示:

@EnableSwagger2
@SpringBootApplication
public class Application {
@Value("${fieldA}")
private String fieldA;
public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
@Bean
public ServiceA serviceA() {
    return new ServiceAImpl(fieldA);
}

但是在运行 SpringBoot 应用程序时收到以下错误:

在 URL 中创建名称为“serviceAImpl”的 bean 时出错没有可用的“java.lang.String”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{}

你有什么解决办法吗?

标签: javaspringspring-boot

解决方案


您使用注释注释了您的类,@Service并将其手动定义为带有@Bean注释的 bean。我确实认为第二种是您计划使用它的方式。@Service注释将使此类被 Spring 的组件扫描拾取并另外创建它的一个实例。当然,它尝试解析参数并在尝试为 String 字段找到匹配的“bean”时失败,因为没有简单的 String bean(并且不应该:))。

删除@Service注释,一切都应该按预期工作。


推荐阅读