将bean自动连接到java列表中,并模拟它

将bean自动连接到java列表中,并模拟它,java,spring,unit-testing,mockito,autowired,Java,Spring,Unit Testing,Mockito,Autowired,你们大多数人可能会说我应该用谷歌搜索它,因为它很简单,但我找不到一个真正正确的解决方案 有一个类使用实现接口的特定对象的ArrayList 第一个问题是列表中实际上只有一项 bean定义(当前只有一个bean实现此接口): 带有@Autowired的类: @Component public class CheckM { private List<IMC> MCsList; @Autowired public void setMCsList(List&

你们大多数人可能会说我应该用谷歌搜索它,因为它很简单,但我找不到一个真正正确的解决方案

有一个类使用实现接口的特定对象的
ArrayList

第一个问题是列表中实际上只有一项

bean定义(当前只有一个bean实现此接口):

带有
@Autowired
的类:

@Component
public class CheckM {   

    private List<IMC> MCsList;

    @Autowired
    public void setMCsList(List<IMC> MCsList)
    {
        this.MCsList = MCsList;
    } 
    ...
}
@组件
公共类检查{
私人名单;
@自动连线
公共无效设置MCsList(列表MCsList)
{
this.MCsList=MCsList;
} 
...
}
当我选中
MCsList
时,只有一项(
MCsList.get(0)
)已初始化。 如何初始化列表中的更多项目(当然没有
new
,而是通过自动连线)

第二个挑战是如何用Mockito模拟这个列表,并将它注入
CheckM
进行
CheckM
的单元测试


谢谢。

列表中只有一个元素,因为您只定义了一个ICM类型的bean。当您定义更多的组件(例如类MC2)时,列表中将填充更多组件elements@michaldo非常感谢。现在我理解了逻辑,但是如何用同一bean的其他实例填充更多的项呢?非常简单:定义多个实现IMC的类。默认情况下,Spring将使用实现的类名命名这些bean。所有这些都将根据您的需要自动连接。不过需要注意的是:请使用构造函数注入,而不是setters/字段注入。这是一种更简洁的方法来指定组件所依赖的协作者。如果你克隆这个方法3次(并提供不同的方法名),你会得到3个bean,它们都是同一个类的实例,不管怎样,我会想到一个问题。为什么MC是一个原型?当CheckM是单例时,MC实际上也是单例的。也许您在其他地方使用MC,但通常将原型注入到singleton意味着错误理解bean范围
@Component
public class CheckM {   

    private List<IMC> MCsList;

    @Autowired
    public void setMCsList(List<IMC> MCsList)
    {
        this.MCsList = MCsList;
    } 
    ...
}