@Qualifier 注解的定义和注释
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.
该注解可以使用在类上、属性上、参数上、方法上
当使用在类上的时候,里面填写的@Qualifier值就是当前bean的唯一标识,在依赖该bean的地方使用@Autowired + @Qualifier 可以使用该bean的名称注入或者该bean前面指定的唯一标识
@Component
@Qualifier("testClassaaa")
public class TestClass {
private String name="testClassA";
public TestClass() {
}
public TestClass(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Configuration
public class QualifierConfig {
@Bean
// @Qualifier("testClass")
public TestClass testClassB(){
return new TestClass("testClassB");
}
@Bean
public TestClass testClassC(){
return new TestClass("testClassC");
}
}
@Component
public class QualifierInject {
@Autowired
@Qualifier("testClassaaa")
private TestClass testClass;
public void test(){
System.out.println(testClass.getName());
}
}
测试代码
@Test
public void test06() {
ApplicationContext context = new ClassPathXmlApplicationContext("04annotation.xml");
QualifierInject qualifierInject = context.getBean("qualifierInject", QualifierInject.class);
qualifierInject.test();
}
QualifierInject进行依赖注入的时候 @Qualifier 里面就可以写 testClass、testClassB、testClassC 或者 TestClass的 唯一标识 testClassaaa都是可以的
理解总结:
1、精确指定bean 解决spring自动注入产生的歧义 bean的唯一标识
2、在使用属性注入使用@Resource注解会好一点
3、在@Configuration注解进行bean申明的时候方法参数列表中使用@Qualifier注解指定bean唯一标识,因为@Resource无法在参数中使用