SpringBoot注解--04--01--注解@Mapper在IDEA中自动注入警告的解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 问题
    • 原因
  • 解决方案
    • 方法1:为 @Autowired 注解设置required = false
    • 方法2:用 @Resource 替换 @Autowired
    • 方法3:在Mapper接口上加上@Repository注解
    • 方法4:用Lombok
    • 方法5:把IDEA的警告关闭掉


问题

@MapperScan(“com.zyp.mapper”)或者@Mapper注解修饰持久层时,借助@autowire注入持久层对象则报错,报错如图
在这里插入图片描述
在这里插入图片描述

可以看到 userMapper 下有个红色警告。虽然代码本身并没有问题,能正常运行,但有个警告总归有点恶心。

原因

IDEA是非常智能的,它可以理解Spring的上下文。然而 UserMapper 这个接口是Mybatis的,IDEA理解不了。
而 @Autowired 注解,默认情况下要求依赖对象(也就是 userMapper )必须存在。而IDEA认为这个对象的实例/代理是个null,所以就友好地给个提示。

解决方案

方法1:为 @Autowired 注解设置required = false

使用 @Autowired 注解时,若希望允许null值,可设置required = false,像这样:

@Autowired(required = false)
private UserMapper userMapper;

这样就不会有警告了。原因很好理解:IDEA认为userMapper是个null,给了警告;加上required = false后,使用 @Autowired 注解不再去校验userMapper是否存在了。也就不会有警告了。

但是一个庞大的项目,可能到处都在引用Mapper,如果只是为了解决IDEA的警告,到处都补上 required = false,工作量不划算啊。而且也很难理解这里只是为了解决IDEA的警告才加上的。

方法2:用 @Resource 替换 @Autowired

@Resource
private UserMapper userMapper;

这样也不会出现警告。可以参考:@Autowired 与@Resource的区别

但是和方法一一个道理,一个项目已经大量使用@Autowired,然后为了这个警告到处改成@Resource,感觉没什么必要。

方法3:在Mapper接口上加上@Repository注解

@Repository
public interface UserMapper {

用@Component替换@Repository也是可以的。
原理大致:IDEA认为 userMapper 是个null,我们加个@Repository注解骗一下IDEA就行了。

总结:这种方式比较推荐,改动小,也简单,也可以更直观的看出是被Spring容器管理的bean。

方法4:用Lombok

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestService {private final UserMapper userMapper;
}

记得一定要在被注入的字段上加上private final关键字,否则不会自动注入。
Lombok生成的代码是这样的:

@Service
public class TestService {private final UserMapper userMapper;@Autowiredpublic TestService(final UserMapper userMapper) {this.userMapper = userMapper;}
}

发现Lombook生成的代码使用了构造方法注入方式来注入bean的。

Spring官方并不建议直接在类的field上使用@Autowired注解。
不用在每个field上都加上@Autowired注解了。

缺点:那就是如果你类之间的依赖关系比较复杂,特别是存在循环依赖(A引用B,B引用A,或者间接引用)时,引用将会启动不起来,这其实是构造方法注入方式的缺点。

方法5:把IDEA的警告关闭掉

将@Autowired警告级别从error降低为warning。设置如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟着pink老师前端入门教程-day19

一、移动WEB开发之流式布局 1、 移动端基础 1.1 浏览器现状 PC端常见浏览器:360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 移动端常见浏览器:UC浏览器,QQ浏览器,欧朋浏览器&#xff0…

论文阅读-Transformer-based language models for software vulnerability detection

「分享了一批文献给你,请您通过浏览器打开 https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您还可以一键导入到 ivySCI 文献管理软件阅读,并在论文中引用 」 本文主旨:本文提出了一个系统的框架来利用基于Transformer的语…

Kubernetes实战(二十五)-快速下载k8s.gcr.io,gcr.io,quay.io镜像

1 背景 在云计算和云原生的环境下,不可避免的会使用很多镜像创建容器,其中有些镜像只有谷歌镜像仓库才有,但是国内不可以直接下载谷歌仓库的镜像,下面推荐几种方法, k8s.gcr.io/gcr.io 是谷歌的镜像仓库,…

LaTeX基本公式语法

Markdown支持通过LaTeX插入复杂的数学公式。 行内公式与块级公式 行内公式:使用一对美元符号$...$标记: 欧拉公式可以表示为 e i π 1 0 e^{i\pi} 1 0 eiπ10,这是一个著名的等式。 块级公式:使用一对双美元符号$$...$$标记…

宠物空气净化器适合养猫家庭吗?除猫毛好的猫用空气净化器推荐

宠物掉毛是一个普遍存在的问题,尤其在脱毛季节,毛发似乎无处不在。这给家中的小孩和老人带来了很多麻烦,他们容易流鼻涕、过敏等不适。此外,宠物有时还会不规矩地拉扯和撒尿,这股气味实在是难以忍受。家人们对宠物的存…

Java——Arrays常用方法

Arrays常用方法 Java 中的 Arrays 类提供了一系列静态方法,可以用来操作数组。 1. sort() 方法——默认升序排序 Arrays.sort() 方法用于对数组进行排序。该方法有多个重载版本,可以对不同类型的数组进行排序。 public static void sort(int[] arr) …

算法学习——LeetCode力扣哈希表篇2

算法学习——LeetCode力扣哈希表篇2 454. 四数相加 II 454. 四数相加 II - 力扣(LeetCode) 描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 …

Springboot启动出现Waiting for changelog lock...问题

今天在开发的时候,Springboot启动的时候出现Waiting for changelog lock…问题. 问题原因:该问题就是发生了数据库的死锁问题,可能是由于一个杀死的liquibase进程没有释放它对DATABASECHANGELOGLOCK表的锁定,导致服务启动失败&…

我的世界Java版服务器如何搭建并实现与好友远程联机Minecarft教程

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

项目中日志采集实践:技术、工具与最佳实践

目录 引言 一. 选择合适的日志框架 二. 配置日志框架 三. 使用适当的日志级别 1、日志级别概述 2、选择适当的日志级别 (这里以logbkck为例) 3、动态调整日志级别 四、 结合日志上下文信息 1. 使用 SLF4J MDC 2. 使用 Log4j 2 的 ThreadContext…

「深度学习」循环神经网络RNN

一、序列模型的例子 二、数学符号定义 X^{(i)<t>}&#xff1a;训练样本 i 的输入序列的第 t 个元素。 T_{X}^{i}&#xff1a;训练样本 i 的输入序列的长度。 Y^{(i)<t>}&#xff1a;训练样本 i 的输出序列的第 t 个元素。 T_{Y}^{i}&#xff1a;训练样本 i 的输…

Error: Unable to authenticate using the provided code. Please try again.

今天弄这个firebase cli的时候一直登陆不进去 都到了最后一步了&#xff0c;但是输入完code还是不成功 原来是因为开了梯子&#xff0c;代理不成功&#xff0c;要在 复制命令到对应的窗口粘贴就行&#xff0c;然后重复之前的命令就行 我复制出来的命令是 set http_proxyhttp…

leetcode-移动零

283. 移动零 题解&#xff1a; 使用双指针法&#xff08;快慢指针&#xff09;&#xff0c;快指针指向的数字不为0的时候&#xff0c;将这个数字移到慢指针的地方&#xff0c;最后在后面补0即可 class Solution:def moveZeroes(self, nums: List[int]) -> None:"&qu…

C++枚举算法(3)

我家的门牌号 题目描述&#xff1a; 我家住在一条短胡同里&#xff0c;这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍&#xff0c;恰好等于n&#xff0c;求 我家的门牌号及总共有多少家。 数据保证有唯一解。 输入 一个正整数n。n < 100000。…

如何创建一个微服务项目(maven聚合)

如何创建一个微服务项目 1.创建一个仓库&#xff08;推荐gitee&#xff09; 2.clone到本地 3.打开项目 4.创建module&#xff0c;将模块分别创建 5.复制其中一个pom.xml文件到总目录下 6.在总pom.xml文件中进行maven聚合 <?xml version"1.0" encoding&quo…

MySQL 表的设计

1.设计一个考勤系统 考勤系统&#xff0c;包含员工表&#xff0c;考勤记录表 create table emp(id int primary key,name varchar(20) );create table info(id int primary key,emp_id int,info_date timestamp,foreign key (emp_id) references emp(id) ); 设计一个学校宿舍…

Spring MVC跨域设置

简介 出于安全方面考虑&#xff0c;浏览器发起请求时&#xff0c;会先检查同源策略&#xff08;协议、主机、端口是否与当前页面相同&#xff09;&#xff0c;不匹配则认为是跨域请求。 CORS (Cross-Origin Resource Sharing) CORS是一种机制&#xff0c;允许服务器声明哪些…

解决hive表新增的字段查询为空null问题

Hive分区表新增字段&#xff0c;查询时数据为NULL的解决方案 由于业务拓展&#xff0c;需要往hive分区表新增新的字段&#xff0c;hive版本为2点多。 于是利用 alter table table_name add columns (col_name string )新增字段&#xff0c;然后向已存在分区中插入数据&#x…

代码解析:list.stream().filter(Objects::nonNull).collect(Collectors.toList())

这段Java代码是使用了Java 8引入的流(Stream) API来处理集合&#xff08;比如List&#xff09;。这个特定的例子展示了如何从一个列表中过滤掉所有的null值&#xff0c;并返回一个新的列表&#xff0c;其中不包含任何null元素。下面是对这段代码的逐步解析&#xff1a; 代码解…

2024 年十大 Vue.js UI 库

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它在前端开发者中越来越受欢迎&#xff0c;以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具&#xff0c;帮助他们快速高效地构建漂亮…