• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Autowired报错原因分析和4种解决方案

java 搞代码 4年前 (2022-01-27) 80次浏览 已收录 0个评论
文章目录[隐藏]


上图的报错信息置信大部分程序员都遇到过,奇怪的是尽管代码报错,但丝毫不影响程序的失常执行,也就是尽管编译器 IDEA 报错,但程序却能失常的执行,那这其中的起因又是为何?

报错起因剖析

报错的起因首先是因为 IDEA 弱小的报警机制,@Autowired 为 Spring 的注解,含意是将某类动静的注入到以后类中,如下图所示:

@Autowired 默认是依据 type 进行注入,并且注入时要求(注入)对象不能为 NULL,默认值如下图所示:

IDEA 报错的起因是:@Autowired 为 Spring 的注解,而注入的 Mapper 对象应用的又是 @Mapper 的注解,然而 @Mapper 又为 MyBaits 的注解,IDEA 能很好的兼容并辨认 Spring 的注解,但不能很好的辨认 MyBatis 的注解,因而在应用 @Autowired 注解时,IDEA 并不能检测到 @Mapper 注解的对象不为 NULL,因而就会报错。

这就是为什么应用 Spring 的注解 @Repository/@Component… 不报错,而应用 @Mapper 注解却会报错的根本原因,如下图所示:


解决方案1:敞开报警机制

敞开 IDEA 注入报警机制,能够防止报错,实现步骤如下。

1.关上 IDEA,找到参数设置选项 “Preferences…” ,如下图所示:

2.顺次抉择 “Editor” -> “Inspections” -> “Spring” -> “Spring Core” -> “Code” -> “Autowiring for bean class” 将 “Error” 级别批改成 “Waring” 级别,如下图所示:

设置实现之后点击确认,查看之前报错的 Mapper 类,此时展现成果如下:

报错信息隐没了。

解决方案2:增加Spring注解

在 Mapper 的类上增加 Spring 的注解,也能够解决 IDEA 报错的问题,如 @Repository 或 @Component 这类注解,如下图所示:

或应用 @Repository 注解,如下图所示:

查看之前的报错信息:

报错隐没了。

解决方案3:容许注入对象为NULL

设置容许注入的 Mapper 对象为 NULL,也能够防止 IDEA 报错,只须要设置 @Autowired(required=false) 即可,如下图所示:

(其中 userMapper2 对象就不报错了)

  • @Autowired(required=true):示意当应用 @Autowired 注解的时候,该 bean 必须存在,否则注入失败,默认值。
  • @Autowired(required=false):示意疏忽以后要注入的 bean,如果有间接注入,没有则跳过,不会报错。

@Autowired 默认值的实现源码:

解决方案4:应用@Resource注解

应用 @Resource 注解替换 @Autowired 注解也能够防止报错,它们的比照成果如下:

@Resource 注解和 @Autowired 注解以以后的场景来说,它们的次要区别是 @Resource 是 Java 本身提供的注解,而 @Autowired 是 Spring 提供的注解,@Autowired 默认值为 required=true,所以必须要一个非 NULL 的对象,当 IDEA 检测不到对象为 NULL 时就会报错,而 @Resource 并没有这项要求。

总结

应用 @Autowired 注解导入 Mapper 对象报错的起因,是因为 @Autowired

来源gaodai.ma#com搞##代!^码网

默认状况下,须要注入一个非 NULL 的对象,而被 @Mapper 润饰的类为 MyBatis 的注解,IDEA 并不能很好的辨认其为非 NULL 对象,因而就会报错。当然,它的解决方案也有很多,举荐应用 @Resource 代替 @Autowired 注解的形式来解决此问题。

更多 Spring 干货,关注公众号「Java中文社群」,实时获取。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Autowired报错原因分析和4种解决方案

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址