Spring --@Primary注解

我就是我 2022-03-09 13:58 378阅读 0赞

1.问题

当一个接口有2个不同实现时,使用@Autowired注解时会报org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息

2.方案1-@Qualifier

使用Qualifier注解,选择一个对象的名称,通常比较常用

3.方案2-@Primary

Primary可以理解为默认优先选择,同时不可以同时设置多个,
内部实质是设置BeanDefinition的primary属性

以下是一个例子:

  1. package cn.myframe.test;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. import org.springframework.context.annotation.Primary;
  6. import org.springframework.stereotype.Component;
  7. @Primary
  8. @Component("metalSinger") // 加注解,让spring识别
  9. class MetalSinger implements Singer{
  10. @Override
  11. public String sing(String lyrics) {
  12. return "I am singing with DIO voice: "+lyrics;
  13. }
  14. }
  15. @Component("operaSinger")
  16. class OperaSinger implements Singer {
  17. @Override
  18. public String sing(String lyrics) {
  19. return "I am singing in Bocelli voice: "+lyrics;
  20. }
  21. }
  22. interface Singer {
  23. String sing(String lyrics);
  24. }
  25. @Component
  26. public class SingerService {
  27. @Autowired
  28. // @Qualifier("metalSinger")
  29. private Singer singer;
  30. public String sing(){
  31. return singer.sing("song lyrics");
  32. }
  33. public static void main(String[] args) {
  34. ApplicationContext context = new AnnotationConfigApplicationContext("cn.myframe.test");
  35. SingerService singerService = context.getBean(SingerService.class);
  36. System.out.println(singerService.sing());
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,378人围观)

还没有评论,来说两句吧...

相关阅读

    相关 @Primary注解

    在看项目的时候看到了@Primary,因为之前没留意过,所以就去学习了一下,在此记录一下自己的理解,感叹一下还要学习的东西太多了,慢慢加油。 1.概述 @Pri

    相关 Spring中@Primary注解

    1.概述 讨论Spring的@Primary注解,该注解是框架在3.0版中引入的。 其作用与功能,当有多个相同类型的bean时,使用@Primary来赋予bean更高的