java - 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。依赖注释:{}
你有什么解决办法吗?
解决方案
您使用注释注释了您的类,@Service
并将其手动定义为带有@Bean
注释的 bean。我确实认为第二种是您计划使用它的方式。@Service
注释将使此类被 Spring 的组件扫描拾取并另外创建它的一个实例。当然,它尝试解析参数并在尝试为 String 字段找到匹配的“bean”时失败,因为没有简单的 String bean(并且不应该:))。
删除@Service
注释,一切都应该按预期工作。
推荐阅读
- python - 聚焦打印张量的实际行和列(不是“,”形状)
- json - 如何在 PouchDB 中存储具有循环的图形?
- java - 有没有办法根据值列表(来自@configurationproperties)验证@RequestHeader
- email - Microsoft Graph API:尝试获取 Outlook 邮箱的消息,但改为获取“ResourceNotFound”
- sqlite - 如何使用 sqlite-net-pcl 和 sqliteExtensions 从 xamarin 表单中的外键表中添加/加载/删除项目
- docker - docker : 不要覆盖基础镜像入口点
- python-3.x - pytest 为所有测试存根方法
- python - Python - 正确的包管理导致代码问题?曾经工作的代码现在出错了
- draftjs - 如何让 Draft.js 编辑器在光标后显示占位符文本?
- broadcastreceiver - Android / kotlin如何在不得不停止请求许可后恢复执行