使用RequiredArgsConstructor注入ArrayList

时间:2018-10-22 02:16:27

标签: dependency-injection javabeans lombok

我试图通过lombok RequiredArgsConstructor将List注入到构造器中

    @Slf4j
    @Component
    @RequiredArgsConstructor (onConstructor = @_(@Inject))
    public class ClassA {

        @NonNull private List<GoodSkill> skills;
        ......
     }

但是有错误:

  

[tomcat:launchProperties]           org.springframework.beans.factory.UnsatisfiedDependencyException:   在URL中创建名称为“ ClassA”的bean时出错   [jar:file:/XXXXX/ClassA.class]:表达了不满意的依赖性   通过构造函数参数0;嵌套异常为   org.springframework.beans.factory.NoSuchBeanDefinitionException:否   类型为java.util.List <\ GoodSkill>的合格Bean:预期至少为1   符合自动装配候选条件的bean。依赖项注释:{}

似乎没有用于“ List <\ GoodSkill>”的bean?我想在注入列表或其他集合时有一些特殊规则?至于GoodSkill类,我想我还应该添加@Component之类的注释?

========

编辑: 更奇怪的是,我重新构建程序包,现在不再抱怨找不到List <\ GoodSkill>的bean,而是找不到GoodSkill的bean。我很困惑。

1 个答案:

答案 0 :(得分:1)

仅可对托管bean进行注入。因此,对于列表,您应该在某个地方输入以下内容:

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

供容器查找。

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

@NonNull private GoodSkillList skills;

或者您也可以研究如何按名称进行注入/自动接线。