1.問題
當一個接口有2個不同實現時,使用@Autowired注解時會報org.springframework.beans.factory.NoUniqueBeanDefinitionException異常信息
2.方案1-@Qualifier
使用Qualifier注解,選擇一個對象的名稱,通常比較常用
3. 方案2-@Primary
Primary可以理解為默認優先選擇,同時不可以同時設置多個,
內部實質是設置BeanDefinition的primary屬性

示例
@Component("metalSinger") // 加注解,讓spring識別 public class MetalSinger implements Singer{ @Override public String sing(String lyrics) { return "I am singing with DIO voice: "+lyrics; } } @Primary @Component("operaSinger") public class OperaSinger implements Singer { @Override public String sing(String lyrics) { return "I am singing in Bocelli voice: "+lyrics; } } public interface Singer { String sing(String lyrics); } @Component public class SingerService { private static final Logger logger = LoggerFactory.getLogger(SingerService.class); @Autowired @Qualifier private Singer singer; public String sing(){ return singer.sing("song lyrics"); } public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext("context.annotation.primary"); SingerService singerService = context.getBean(SingerService.class); System.out.println(singerService.sing()); } }