java - 创建两个实现相同接口(interface)的 bean

标签 java spring javabeans autowired

我想创建两个实现相同接口(interface)的 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);
}
}

这是我的测试类(class)。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {

@Rule
public final SystemOutRule log = new SystemOutRule().enableLog();

@Autowired
private MediaPlayer player;

@Autowired
@Qualifier("aaa")
private CompactDisc cd;

@Test
public void cdShouldNotBeNull(){
    assertNotNull(cd);
}


@Test
public void play(){
    player.play();
    assertEquals("XYZ", log.getLogWithNormalizedLineSeparator());
}
}

编辑: 我的 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();
}
}

最佳答案

将代码更改为以下内容:

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

关于java - 创建两个实现相同接口(interface)的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38077445/

相关文章:

java - Spring应用程序看不到具有属性扩展名的文件(application.properties除外)

java - 映射到 com.vividsolutions.jts.geom.Point 无效的字节序标志

java - 将 GET 请求参数获取到 @ViewScoped bean

java - 如何在SQL查询中插入变量

java - 如何在 Selenium 中单击带有 anchor 标记的图像或图标

java - 构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError : javax/servlet/ServletContext

java - 具有不常见 getter 方法名称的序列化中的 Jackson 命名约定问题

java - 在 Windows 10 机器上最新版本的 Java 上崩溃的 fatal error

java - 如何缓存/读取json文件?

java - Spring/LDAP - 在 beans 配置中调用 setter 方法