dependency-injection - 使用 RequiredArgsConstructor 注入 ArrayList
问题描述
我试图通过 lombok RequiredArgsConstructor 将 List 注入构造函数
@Slf4j
@Component
@RequiredArgsConstructor (onConstructor = @_(@Inject))
public class ClassA {
@NonNull private List<GoodSkill> skills;
......
}
但是然后有错误:
[tomcat:launchProperties] org.springframework.beans.factory.UnsatisfiedDependencyException:在 URL [jar:file:/XXXXX/ClassA.class] 中定义名称为“ClassA”的 bean 创建错误:通过构造函数参数 0 表示的不满足依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 java.util.List<\GoodSkill> 类型的合格 bean:预计至少有 1 个符合自动装配候选资格的 bean。依赖注释:{}
似乎没有“List<\GoodSkill>”的bean?我猜在注入 List 或其他 Collections 时有一些特殊规则?至于GoodSkill类,我想我也应该添加@Component之类的注释?
========
编辑:更奇怪的是,我重新构建包,现在它不再抱怨找不到 List<\GoodSkill> 的 bean,但没有找到 GoodSkill 的 bean。我很困惑。
解决方案
注入只能用于托管 bean。所以,对于一个列表,你应该有类似的地方:
@Component
public class GoodSkillList extends ArrayList<GoodSkill>{}
供容器查找。
也许你有?如果你有很多这样的 bean,容器/Spring 可能无法决定使用哪个。在这种情况下,您可以通过多种方式界定可能的替代方案,例如您可以设置ClassA
为仅接受:
@NonNull private GoodSkillList skills;
或者,您可以研究如何按名称注入/自动装配。
推荐阅读
- javascript - 如何在 MUI TextField 上使用 onDoubleClick?
- android - Flutter:AppBar、返回按钮、状态栏颜色
- python - 如何使用在列表中查找对象的位置
- telegram - Telethon bot 发送太多照片,并且没有正确循环播放
- tsql - 数据质量维度的动态 SQL 表验证
- javascript - Phaser 3 上的 moveToObject 精灵动画
- parsing - 令牌已被另一个规则消耗,无法再次解析令牌
- compiler-errors - Solidity - 标识符未找到或不唯一 onlyOwner()
- c - 如何测量接收数据包的精确或近似延迟
- python - 将 pygame 转换为 cv2 到 pygame 时,Surface alpha 丢失