1.@Qualifier的作用
在平时写程序的时候,注入名称相同的bean,或者一个接口多个实现类,我们就可以使用@Qualifier,进行明确是使用那个bean,或者bean。
2.举例
2.1先创建一个接口,和两个实现做个接口的实现类
用户接口
public interface UserService { void UserInfo(); }
第一个接口实现类
@Service
public class UserServiceImpl1 implements UserService{
@Override
public void UserInfo() {
System.out.println("这是用户1");
}
}
第二个接口实现类
@Service
public class UserServiceImpl2 implements UserService{
@Override
public void UserInfo() {
System.out.println("这是用户2");
}
}
2.2进行使用UserService接口
当注入进去的时候就已经报警告了
@Test
public void test(){
userService.UserInfo();
}
进行测试就报
No qualifying bean of type 'org.javaboy.formlogin.service.UserService' available: expected single matching bean but found 2: userServiceImpl1,userServiceImpl2
不止有一个bean,不知道该调用第几个
2.3在接口实现类的@servie的里面声明bean的名称
@Service("userServiceImpl1")@Service("userServiceImpl2")
这时@Qualifier就派上用场了
标明是"userServiceImpl1"的bean
@Autowired
@Qualifier("userServiceImpl1")
private UserService userService;
@Test
public void test(){
userService.UserInfo();
}
点击运行
确实是调用第一个接口实现类,第二个就不过多解释了