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引起的歧义现象

Spring的注解@Qualifier注解

Spring 框架学习---- bean自动装配注解开发

整理:spring注解 @Autowired @Qualifier @Resource

spring调用方法(接口和多个实现类的情况)

Spring 使用@Primary @Qualifier解决多实现冲突