此时,我们启动项目会发现,控制台报错了:
出现错误的原因呢,是因为在Spring的容器中,UserService这个类型的bean存在两个,框架不知道具体要注入哪个bean使用,所以就报错了。
如何解决上述问题呢?Spring提供了以下几种解决方案:
- @Primary
- @Qualifier
- @Resource
方案一:使用@Primary注解
当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。
- @Primary
- @Service
- public class UserServiceImpl implements UserService {
- }
复制代码
方案二:使用@Qualifier注解
指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。 @Qualifier注解不能单独使用,必须配合@Autowired使用。
- @RestController
- public class UserController {
-
- @Qualifier("userServiceImpl")
- @Autowired
- private UserService userService;
复制代码
方案三:使用@Resource注解
是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。
- @RestController
- public class UserController {
-
- @Resource(name = "userServiceImpl")
- private UserService userService;
复制代码
@Autowird 与 @Resource的区别
- @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
- @Autowired 默认是按照类型注入,而@Resource是按照名称注入
综合项目:
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战