比如在我们的springboot项目中我们的service接口有多个实现类,那么在不同的实现类中我们有不同的业务逻辑,那么在controller中如果 @Autowired是serviced的接口那么就不能知道我们到底调用的是哪一个实现类。这个时候就需要在@Autowired处添加@Qualifier(“service1”)注解,括号中的就是每个实现类中@Service(“service1”)的名字。这样就能够知道具体的实现类是哪一个。
这个是service接口类
public interface UserService {
public int add(User user);
第一个service实现类
@Service("service1")
public class UserServiceImpl implements UserService {
@Autowired
public UserDao userDao;
@Override
public int add(User user) {
return userDao.Adduser(user)+8888;
}
第二个service接口
@Service("service2")
public class UserServiceImpl2 implements UserService {
@Autowired
public UserDao userDao;
@Override
public int add(User user) {
return userDao.Adduser(user)+999;
}
controller类进行调用
@RestController
@RequestMapping("/user")
public class UserController {
@Qualifier("service1")
@Autowired
UserService userService;
@Qualifier("service2")
@Autowired
UserService userService1;
@RequestMapping("/add")
public int add(User user){
return userService.add(user);
}
@RequestMapping("/add1")
public int add1(User user){
return userService1.add(user);
}
下面是default关键词
default int add1(User user) {
return 0;
}
如果需要在类中添加一个方法带方法体的可以用default关键词,这样该接口的实现类也不会去实现此方法。