我想創建兩個實現相同接口的bean。豆類有名字,但是當我使用@Qualifier
註釋創建兩個實現相同接口的bean
有錯誤,如:
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);
}
}
這是我的測試類。
@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());
}
}
編輯: 我的CD播放器類
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();
}
}
還不行。當我使用@Primary註釋它可以工作,但我想按名稱選擇。我添加了CDPlayer類代碼 – lassa
從CDplayer構造函數中刪除參數,並將其作爲Play方法的參數 – Jens
它的工作原理。謝謝:) – lassa