@Primary 和 @Qualifier的区别

  当一个接口有多个不同实现时,注入Spring的时候会产生org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息。
  解决方式有2种,使用@Primary 和 @Qualifier注解。

注解 区别
@Primary 优先注入该注解的标注的bean
@Qualifier 确定注入该注解标定的bean

1、@Qualifier

  该注解的意思是直接注入该注解标定的bean,而非选择。如:

public interface ITeacher {
    String getName();
}
@Component
public class MathTeacher implements ITeacher {
    public String getName() {
        return "Math";
    }
}

@Component
public class EnglishTeacher implements ITeacher {
    public String getName() {
        return "English";
    }
}

  如果这个时候使用@Autowired就会报错,需要指定注入具体对象:

public class ClassRoom {
   @Autowired
   @Qualifier("englishTeacher")
   public ITeacher teacher;
}

2、@Primary

  @Qualifier是在使用注入的时候,使用方明确指出使用哪个;@Primary更像是提供方告诉你优先使用哪个。举个例子,你实现排序接口的很多的实例,如冒泡排序,快排,选择排序等等。在使用者选择不明确的情况下,你希望他优先(默认)选择冒泡排序。这样你就在冒泡排序实现类上使用@Primary予以标识。

public interface ISort {
    String getName();
}
@Component
@Primary
public class MaopaoSort implements ISort {
    public String getName() {
        return "冒泡排序";
    }
}

@Component
public class XuanzeSort implements ISort {
    public String getName() {
        return "选择排序";
    }
}
public class MySort {
   @Autowired
   public ISort sort;
}
发布了63 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/myt0929/article/details/104555590
今日推荐