前言
@Autowire默认根据类型来自动装配。
@Qualifier注解经常和@Autowire配合使用。
问题
使用@Autowire注入bean时,多个相同类型的bean会导致注入失败。
实践
下面是使用SpringBoot项目进行的测试。
1.报错(出现问题)
Service
//接口
public interface StudentTest {
String getName();
}
//实现类
@Service
public class StudentTest01 implements StudentTest {
@Override
public String getName() {
return "StudentTest01";
}
}
@Service
public class StudentTest02 implements StudentTest {
@Override
public String getName() {
return "StudentTest02";
}
}
Controller
//Controller
@RequestMapping("/test")
@RestController
public class TestController {
@Autowired
private StudentTest studentTest;
@PostMapping("/getBean")
public String BeanTest(){
return studentTest.getName();
}
}
有两个StudentTest类型的Bean,在使用@Autowire注入时会注入失败。
2.解决问题
我们需要@Qualifier指定一个Bean注入就行了
比如:@Qualifier("studentTest02")
Controller修改
//Controller
@RequestMapping("/test")
@RestController
public class TestController {
@Autowired
@Qualifier("studentTest02")
private StudentTest studentTest;
@PostMapping("/getBean")
public String BeanTest(){
return studentTest.getName();
}
}
使用Postman请求返回成功。
结论
如果出现在使用@Autowire注入bean时,出现多个相同类型的bean注入失败,可以通过@Qualifier("name")来指定是注入特定的bean。