@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屬性進行注入了 】接口