java - 没有符合条件的 Bean […] IsAvailable
问题描述
我有以下结构:
网络服务
@Autowired
public FooService(@Qualifier("fooMapper1") FooBO fooBO1,
@Qualifier("fooMapper2") FooBO fooBO2,
@Qualifier("fooMapper3") FooBO fooBO3) {
this.fooBO1= fooBO1;
this.fooBO2= fooBO2;
this.fooBO3= fooBO3;
}
配置
@Configuration
public class MapperConfig {
@Bean("fooMapper1")
public FooBO oneMapper(FooOneMapper mapper) {
return new FooBO(mapper);
}
@Bean("fooMapper2")
public FooBO twoMapper(FooTwoMapper mapper) {
return new FooBO(mapper);
}
@Bean("fooMapper3")
public FooBO threeMapper(FooThreeMapper mapper) {
return new FooBO(mapper);
}
}
福宝
@Autowired
public FooBO(IFooMapper mapper) {
this.mapper = mapper;
}
IFooMapper是由FooOneMapper、FooTwoMapper和FooThreeMapper扩展的接口。
当我尝试运行该项目时,会抛出以下消息:
Description:
Parameter 0 of constructor in ...FooBO required a single bean, but 4 were found:
- FooOneMapper: defined in file [C:...\mapper\FooOneMapper.class]
- FooTwoMapper: defined in file [C:...\mapper\FooTwoMapper.class]
- FooThreeMapper: defined in file [C:...\mapper\FooThreeMapper.class]
- IFooMapper: defined in file [C:...\mapper\IFooMapper.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
我不明白为什么 spring 与 bean 有这种冲突,因为一切似乎都配置得很好。
解决方案
我猜你已经用注释FooBO
进行了@Component
注释。
扫描包含 Spring Boot 主类的根包以查找任何带有 @Component 注释的类,并将这些类注册为容器内的 Spring bean 定义
您正在配置类中创建 bean。确保FooBO
并IFooMapper
没有使用@Component
或其原型注释进行注释。
class FooBO {
private final IFooMapper mapper;
public FooBO(IFooMapper mapper) {
this.mapper = mapper;
}
}
如果由于某种原因您无法删除@Component
. 其他修复方法是将其中一个实现标记IFooMapper
为主要使用@Primary
@Component
@Primary
class FooOneMapper implements IFooMapper{
}
或提供额外的数据来帮助 spring 解决依赖关系。
public FooBO(@Qualifier("fooThreeMapper") IFooMapper mapper) {
this.mapper = mapper;
}
推荐阅读
- c - 如何在一个位置将数组元素向右移动?C语言
- javascript - 如何在 javascript 中使用正则表达式替换字符串 '&user_story=x' 的所有实例?
- .htaccess - 重定向定位到旧网址的开头和结尾
- python - z3py push 后模型错误但没有正确模型
- gson - 如何在 JAVA 中包装改造响应?
- django - 让 django 在 docker-compose 中使用 `network_mode: host`
- cygwin - Q:镜像下载步骤cygwin安装报错怎么处理?
- angular - 无法绑定到“ngForOf”,因为在子模块的组件中访问 *ngFor 时它不是“div”的已知属性
- javascript - 关于 concole.log 中显示错误时的行为
- python - 如何在列表列表中生成随机数