@Primary 注解引出的问题
@Primary 注解
刚看到这个,还以为是持久层的注解呢,以为和@Id差不多,一查才知道,这两个风马牛不相及,反倒和@Qualifier以及@Resource有点像了,但是相比而言,后面两个更加的灵活。
我觉得第一篇博客讲的不太对,结合第二篇应该就能理解第一篇中的【而@Qualifier这个注解则指定某个bean有没有资格进行注入】这句话了。
当一个接口,有几种不同的实现类,如果一个以上的实现类使用了 bean 注解(也就是@Copmonent 或者 @Service),那么就会 spring 在自动注入的时候就不知道注入那个实现类了,因为每个实现类都是平等的,会报出如下异常:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [main.service.Singer] is defined: expected single matching bean but found 2: metalSinger,operaSinger
@Primary 注解的意思就是以哪个实现类为主. 也就是spring容器知道该注入哪个实现类了.
而 @Qualifier 就是给每个实现类取别名,注入的时候需要指定别名【 也就是在配置 bean 的时候需要使用 @Qualifier 指定 bean 的 name 属性,同时在注入的时候需要使用 @Qualifier 指定 bean 的 name 属性,使得 @Autowired 也不得不按照bean的 nama属性进行注入了 】