@Primary 注解html
刚看到这个,还觉得是持久层的注解呢,觉得和@Id差很少,一查才知道,这两个风马牛不相及,反倒和@Qualifier以及@Resource有点像了,可是相比而言,后面两个更加的灵活。spring
我以为第一篇博客讲的不太对,结合第二篇应该就能理解第一篇中的【而@Qualifier这个注解则指定某个bean有没有资格进行注入】这句话了。code
当一个接口,有几种不一样的实现类,若是一个以上的实现类使用了 bean 注解(也就是@Copmonent 或者 @Service),那么就会 spring 在自动注入的时候就不知道注入那个实现类了,由于每一个实现类都是平等的,会报出以下异常:htm
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容器知道该注入哪一个实现类了. blog
而 @Qualifier 就是给每一个实现类取别名,注入的时候须要指定别名【 也就是在配置 bean 的时候须要使用 @Qualifier 指定 bean 的 name 属性,同时在注入的时候须要使用 @Qualifier 指定 bean 的 name 属性,使得 @Autowired 也不得不按照bean的 nama属性进行注入了 】接口