在开发的时候,你肯定也想要自己的程序更加智能,我指的是自动装配。前面我们专门讲过@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。
这一篇就分享到这里啦,如果有帮到你,欢迎点赞收藏加关注。