码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-22 13:28:52      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:代码   ima   创建   关注   异常   开发   spring   col   void   

在开发的时候,你肯定也想要自己的程序更加智能,我指的是自动装配。前面我们专门讲过@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实现高级装配

标签:代码   ima   创建   关注   异常   开发   spring   col   void   

原文地址:https://www.cnblogs.com/chenyulin/p/11225093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!