Spring框架学习(八):@Qualifier实现高级装配

在开发的时候,你肯定也想要自己的程序更加智能,我指的是自动装配。前面我们专门讲过@Autowired注解能够自动的在上下文中获取满足要求的bean,并将其注入到你想注入的属性中。就像这个样子:

Spring框架学习(八):@Qualifier实现高级装配

这个例子要完成的内容就是:在程序运行时,自动注入一个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。

这一篇就分享到这里啦,如果有帮到你,欢迎点赞收藏加关注。

上一篇:Homework Day04


下一篇:【深入理解计算机系统-第二版】第二章部分家庭作业(Homework)参考答案