一句话概括一下,@Qualifier注解的用处:当一个接口有多个实现的时候,为了指名具体调用哪个类的实现。
下面配上简单的代码示例解释:
//定义一个接口
public interface QualifierInterface {
void testQualifierMethod();
}
新建两个实现类,service()注解里面表名是one或者two
@Service("one")
public class One implements QualifierInterface{
@Override
public void testQualifierMethod() {
System.out.println("this is One print:" + 1);
}
}
@Service("two")
public class Two implements QualifierInterface{
@Override
public void testQualifierMethod() {
System.out.println("this is Two print:" + 2);
}
}
新建一个测试类
@SpringBootTest
class QualifierRun {
@Qualifier("one")
@Resource
QualifierInterface qualifierInterface;
@Test
void contextLoads() {
qualifierInterface.testQualifierMethod();
}
}
注意:如果我这里不加入@Qualifier注解,运行是会报错的。
当我加入@Qualifier(“one”)输出
this is Two print:1
2021-01-12 18:07:14.069 INFO 39816 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
Process finished with exit code 0
当我加入@Qualifier(“two”)输出
this is Two print:2
2021-01-12 18:07:14.069 INFO 39816 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
Process finished with exit code 0