首页 > 解决方案 > 使用 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。我很困惑。

标签: dependency-injectionjavabeanslombok

解决方案


注入只能用于托管 bean。所以,对于一个列表,你应该有类似的地方:

@Component
public class GoodSkillList extends ArrayList<GoodSkill>{}

供容器查找。

也许你有?如果你有很多这样的 bean,容器/Spring 可能无法决定使用哪个。在这种情况下,您可以通过多种方式界定可能的替代方案,例如您可以设置ClassA为仅接受:

@NonNull private GoodSkillList skills;

或者,您可以研究如何按名称注入/自动装配。


推荐阅读