一、问题描述

在spring的注解使用中,@Autowired注解的作用是注入bean,但是假如有一个接口,它包含两个实现类,这个时候应该怎么实现注入呢?

二、单个实现类使用情况

controller:

@RestController
@RequestMapping(value = "/user")
public class UserController {


    @Autowired
    private IUserService iUserService ;



    @RequestMapping(value = "/getUsers23")
    public List<User> getUsers2() {
        List<User> users = iUserService .list();
        return users;
    }

}

 

service

public interface IUserService extends IService<User> {
}

serviceImpl

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}

正常的代码,这样是正常的注入的

三、多个实现类情况

假如我现在还有一个实现类实现 IUserService,代码如下

@Service
public class UserServiceImpl1 extends ServiceImpl<UserMapper, User> implements IUserService {
}

 

这个时候,我们controler使用注解的方式不变,启动看看

如何使用@Autowired注入含有多个实现类的接口

可以看到,这个时候启动报错了。那么应该如何解决呢

这个时候,我们需要确定我们在controller中需要使用的是哪一个实现类,假如的是第一个,则我们使用第一实现类的名字作为注入参数的定义名称,代码如下

@RestController
@RequestMapping(value = "/user")
public class UserController {
    
   //修改参数名称为需要注入的实现类的名称
    @Autowired
    private IUserService userServiceImpl;



    @RequestMapping(value = "/getUsers23")
    public List<User> getUsers2() {
        List<User> users = userServiceImpl.list();
        return users;
    }

}

这时在启动,可以发现项目正常启动

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-04
  • 2022-12-23
  • 2021-11-26
  • 2022-12-23
  • 2021-07-12
猜你喜欢
  • 2022-01-12
  • 2021-10-21
  • 2021-11-28
  • 2022-12-23
  • 2019-01-05
  • 2022-12-23
相关资源
相似解决方案