Spring框架学习:@Qualifier实现高级装配
Posted chenyulin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架学习:@Qualifier实现高级装配相关的知识,希望对你有一定的参考价值。
在开发的时候,你肯定也想要自己的程序更加智能,我指的是自动装配。前面我们专门讲过@Autowired注解能够自动的在上下文中获取满足要求的bean,并将其注入到你想注入的属性中。就像这个样子:
这个例子要完成的内容就是:在程序运行时,自动注入一个Student类的对象到student引用中。问题来了,如果我现在上下文中有多个bean都是Student的对象,会发生什么?答案是装配失败,原因可想而知,因为满足条件的对象有多个,所以Spring不知道该选择哪一个,导致抛出异常。
为了解决这个问题,我们可以使用Spring的@Qualifier注解,见名知意,@Qualifier注解是“限定”的意思。看一下这段代码。
@Configuration @ComponentScan(basePackageClasses = MyConfig.class) public class MyConfig @Bean @Qualifier("work1") Homework homework1() return new Homework("1+5 = ?"); @Bean @Qualifier("work2") Homework homework2() return new Homework("2+6 = ?");
@Component public class Student @Value("小明") private String name; //请看这里 @Autowired @Qualifier("work2") private Homework homework; public Student() public Student(String name, Homework homework) this.name = name; this.homework = homework; public void doHomeWork() System.out.println(homework.getContent()); public String getName() return name; public void setName(String name) this.name = name; public Homework getHomework() return homework; public void setHomework(Homework homework) this.homework = homework;
我在创建bean时使用了@Qualifier注解,在注入时也使用了,参数一致。这样就不会产生歧义了,自动装配会正常进行。在开发过程中建议使用这样的方式来指明要装配的bean。
这一篇就分享到这里啦,如果有帮到你,欢迎点赞收藏加关注。
以上是关于Spring框架学习:@Qualifier实现高级装配的主要内容,如果未能解决你的问题,请参考以下文章
spring in action 学习笔记八:用@Primary 或者@Qualifier消除@Autowired引起的歧义现象