@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属性进行注入了 】
本文详细解析了Spring框架中@Primary和@Qualifier注解的作用与区别。当存在多个实现类时,@Primary用于指定默认注入的实现类,解决Spring注入的不确定性;而@Qualifier则用于为实现类指定别名,便于在注入时明确指定所需的实现类。
556

被折叠的 条评论
为什么被折叠?



