首页 > 其他分享 >@Autowired注入属性idea警告

@Autowired注入属性idea警告

时间:2023-09-13 11:22:36浏览次数:39  
标签:Mapper Autowired Spring IDEA idea 报错 注解 属性

1. @Autowired报错原因分析和4种解决方案!

上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 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 默认情况下,需要注入一个非 NULL 的对象,而被 @Mapper 修饰的类为 MyBatis 的注解,IDEA 并不能很好的识别其为非 NULL 对象,因此就会报错。当然,它的解决方案也有很多,推荐使用 @Resource 替代 @Autowired 注解的方式来解决此问题。

原文博客地址:https://zhuanlan.zhihu.com/p/386653204

标签:Mapper,Autowired,Spring,IDEA,idea,报错,注解,属性
From: https://www.cnblogs.com/record-100/p/17699104.html

相关文章

  • 8 个 IDEA 常用小技巧,准点下班必备!
    InteIIiJIDEA2023.2版本发布了,在2023.2中,官方根据用户的宝贵反馈对新UI做出了大量改进,新UI界面大大减少了干扰,可以让用户更好地专注于代码。相信很多同学都已经迫不及待地尝试了。但官方激活码的校验规则进行了更新,之前已经成功激活的Idea可能突然无法使用了,给大家准备了激活码......
  • IntelliJ IDEA教程()ideaIU-快速创建测试用例
    一.创建工程  完整的包结构src/main是源码存放包 src/test是测试类存放包1.工程结构图2.快速生成测试类......
  • web前端入门到实战:HTML5基础-新增标签+新增属性+布局案例
    html5中常用的结构标签article文章header头部nav导航section区域aside侧边栏hgroup区块的相关信息figure定义一组内容及标题figcaption定义figure元素的标题footer底部dialog对话框使用习惯:header/section/footer>aside/articl......
  • hutool依赖,复制list<a>的相同属性给list<b>,判断传入值是否为空等
      依赖传入<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version></dependency>   以下是将list<User>与list<UserVO>相同属性名的属性值,从list<User>......
  • JavaSE(IDEA)
    JavaSE(IDEA)publicclassMain{publicstaticvoidmain(String[]args){//单行注释////输出一个Hello,WorldSystem.out.println("Helloworld!");}}//多行注释/*注释*//*我是多行注释可以注释一段文字*/......
  • 蓝牛文件属性时间批量修改工具v2.00免费版
     在日常中如果你需要更改多个文件的创建时间或是修改时间 蓝牛文件属性时间批量修改工具就可以快速帮助你一键批量更改,软件只需导入文件然后设置时间即可。更新日志2023年9月9日 V2.00更新 原时间或指定时间随机加小时时间 并且 优化核心代码 修改已知BUG2022.06.2......
  • 4. IDEA的安装与使用(上)
    本章专题与脉络【WhyIDEA?】【注】JetBrains官方说明:尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向JetBrains产品的用户,因为这些用户更有可能参加调查。此外,2022年,某美国软件开发商在对近千名专业的Java开发者调研后,发布了《2022年Java开发者生产......
  • IntelliJ IDEA 常用快捷键一览表
    1-IDEA的日常快捷键第1组:通用型说明快捷键复制代码-copyctrl+c粘贴-pastectrl+v剪切-cutctrl+x撤销-undoctrl+z反撤销-redoctrl+shift+z保存-saveallctrl+s全选-selectallctrl+a第2组:提高编写速度(上)说明快捷键......
  • IDEA 远程 Debug 调试
    背景有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用IDEA远程debug的过程中的细节。看完可以解决你的一些疑惑。配置远程debug的服务,以springboot微服务为例(springcloud的应该差不多,我没研究过)。首先,启动springboot需要加上特定的参数。1、IDEA设置高......
  • CSS3 中 transition 和 animation 的属性分别有哪些
    Transition属性:transition 属性用于定义元素在状态改变时从一个样式转换到另一个样式的过渡效果。它包含以下几个属性:transition-property:指定过渡效果应用的CSS属性名称,多个属性可以用逗号分隔。transition-duration:指定过渡效果的持续时间,单位可以是秒(s)或毫秒(ms)。transit......