使用@Qualifier可以分别为同样类型的Bean分别注入不同的依赖值
然后当我们@Autowired注入时就会出现异常,NoUniqueBeanDefinitionException, 以提示有多个满足条件的 bean 进行自动装配。程序无法正确做出判断使用哪一个。
@Autowired
private TestService testService;
@Autowired
@Qualifier("testServiceImpl1")
private TestService testService;
@Autowired
@Qualifier("testServiceImpl2")
private TestService testService2;
通过将 @Qualifier 注解与我们想要使用的特定 Spring bean 的名称一起进行装配,Spring 框架就能从多个相同类型并满足装配要求的 bean 中找到我们想要的.
对同一个接口,可能会有几种不同的实现类,如这里的 TestServiceImpl2 与 TestServiceImpl1.
@Service
public class TestServiceImpl1 implements TestService{
@Override
public void test() {
System.out.println("TestServiceImpl1 test 方法 ");
}
}
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
@Service
@Primary
public class TestServiceImpl2 implements TestService{
@Override
public void test() {
System.out.println("TestServiceImpl2 test 方法 ");
}
}
在使用 @Autowired 注解进行对象注入时,就会默认加载TestServiceImpl2
@Autowired
private TestService testService;