Java 创建两个实现相同接口的bean

Java 创建两个实现相同接口的bean,java,spring,javabeans,autowired,Java,Spring,Javabeans,Autowired,我想创建两个实现相同接口的bean。bean有名称,但当我使用@Qualifier注释时 出现如下错误: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cdPlayer' defined in soundsystem.CDPlayerConfig: Unsatisfied dependency expressed through

我想创建两个实现相同接口的bean。bean有名称,但当我使用
@Qualifier
注释时

出现如下错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cdPlayer' defined in soundsystem.CDPlayerConfig: Unsatisfied dependency expressed through method 'cdPlayer' parameter 0: No qualifying bean of type [soundsystem.CompactDisc] is defined: expected single matching bean but found 2: sss,aaa; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [soundsystem.CompactDisc] is defined: expected single matching bean but found 2: sss,aaa
这是我的配置类

@Configuration
public class CDPlayerConfig {

@Bean(name="bbb")
public CompactDisc blankDisc(){
    List<String> list = new LinkedList<>();
    list.add("qwer");
    list.add("qazw");
    return new BlankDisc("one", "two", list);
}

@Bean(name="aaa")
public CompactDisc sgtPeppers(){
    return null;
}
@Bean
public MediaPlayer cdPlayer(CompactDisc cd){
    return new CDPlayer(cd);
}
}
编辑: 我的CDPlayer类

public class CDPlayer implements MediaPlayer {

private CompactDisc cd;

@Autowired  
public CDPlayer(CompactDisc cd){
    this.cd = cd;
}
@Override
public void play() {
    // TODO Auto-generated method stub
    cd.play();
}
}

spring尝试在此处注入bean
Compactdisc

@Bean
public MediaPlayer cdPlayer(CompactDisc cd){
    return new CDPlayer(cd);
}
您必须将
@限定符
注释添加到
压缩光盘


另一种方法是从CDplayer构造函数中删除该参数,并将其作为参数放入play方法

spring尝试在此处注入bean
Compactdisc

@Bean
public MediaPlayer cdPlayer(CompactDisc cd){
    return new CDPlayer(cd);
}
您必须将
@限定符
注释添加到
压缩光盘


另一种方法是从CDplayer构造函数中删除参数,并将其作为参数添加到play方法中

将代码更改为以下内容:

@Bean
public MediaPlayer cdPlayer(@Qualifier("bbb") CompactDisc cd){
    return new CDPlayer(cd);
}

将代码更改为以下内容:

@Bean
public MediaPlayer cdPlayer(@Qualifier("bbb") CompactDisc cd){
    return new CDPlayer(cd);
}

还是不行。当我使用@Primary注释时,它可以工作,但我想按名称进行选择。我添加的CDPlayer类代码仍然不起作用。当我使用@Primary注释时,它可以工作,但我想按名称进行选择。我添加的CDPlayer类代码仍然不起作用。当我使用@Primary注释时,它可以工作,但我想按名称进行选择。我添加了CDPlayer类代码从CDPlayer构造函数中删除该参数,并将其作为参数添加到Play方法仍然不起作用。当我使用@Primary注释时,它可以工作,但我想按名称进行选择。我添加了CDPlayer类代码,从CDPlayer构造函数中删除该参数,并将其作为参数添加到Play方法中