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