24.9.7——小学期开发实记

今天完成了基础信息的CRUD,但是遇到了一个关于JAVA Spring Boot注入的问题。

问题如下:

Error:(20, 34) Could not autowire. No beans of 'workCenterInfoMapper' type found.

@Autowired
private workCenterInfoMapper workCenterInfoMapper;

我改成:

@Resource
private workCenterInfoMapper workCenterInfoMapper;

就不报错了。

报错原因分析:

当你使用 @Autowired 注解时,Spring会尝试根据类型自动装配所需的bean。如果在Spring的上下文中找不到类型为 workCenterInfoMapper 的bean,就会抛出“Could not autowire”错误。这个问题的根本原因可能包括:

  1. Bean未注册workCenterInfoMapper 接口没有被Spring容器识别为一个bean,通常是因为缺少必要的注解(如 @Mapper 或 @Repository)。
  2. 组件扫描配置问题:Spring的组件扫描可能没有覆盖到包含 workCenterInfoMapper 的包。
  3. 依赖注入的方式@Autowired 是按类型注入,而 @Resource 是按名称注入。如果存在多个相同类型的bean,@Autowired 可能会失败,而 @Resource 可以通过名称找到特定的bean。

 

后面搜索原因的时候发现@mapper确实没有注入,是我疏忽大意了。

加上之后果然不报错了。

 

解决方案:

将注解从 @Autowired 更改为 @Resource 后,问题解决的原因如下:

1. 按名称注入

  • @Resource 默认按名称进行注入。如果Spring容器中存在名为 workCenterInfoMapper 的bean,它会直接找到并注入该bean,而不需要考虑类型匹配的问题。

2. 避免类型冲突

  • 如果存在多个同类型的bean,使用 @Autowired 可能会引发冲突,导致无法确定注入哪个bean。而 @Resource 通过名称可以明确指定要注入的bean,避免了这种冲突。

3. 更加灵活的配置

  • @Resource 是Java EE标准注解,具有更好的兼容性和灵活性,适用于需要按名称或类型注入的场景。

 

posted @ 2024-09-08 01:02  sodamate  阅读(5)  评论(0编辑  收藏  举报