Spring Boot--08--Mybatis 之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/661994.shtml

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

相关文章

振动传感器接头MIL-C-5015玻璃烧结插座

振动传感器接头MIL-C-5015玻璃烧结插座产品主要用于加速度传感器,倾角传感器,耐高低温,耐腐蚀,适合使用恶劣环境。适用品牌有:MEGGITT,VibraSens,CTC measurement,BENTLY(本特利)等众多品牌可定…

【代码随想录-链表】环形链表 II

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

C++ 入门(五)— 头文件(Header files)

文章目录 头文件的用途使用标准库头文件使用头文件传播前向声明避免将函数或变量定义放在头文件中尖括号与双引号VSCode中添加来自其他目录的头文件 头文件保护标头保护不会阻止标头包含在不同的代码文件中pragma once总结 头文件的用途 C 代码文件(扩展名为 .cpp&…

基于Java SSM框架实现教师管理系统项目【项目源码】

基于java的SSM框架实现教师管理系统演示 JAVA简介 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server p…

网络空间测绘在安全领域的应用(下)

3.漏洞感知 漏洞感知能力在当今的网络安全领域是至关重要的,而其核心技术之一是漏洞验证技术。通过对漏洞信息与产品版本的关联,系统能够更准确地感知漏洞,但仅仅依靠这种数据关联会引发一系列问题。 首先,漏洞是程序中存在的隐…

YOLOv5改进:下采样系列 |一种新颖的基于 Haar 小波的下采样HWD,有效涨点系列

💡💡💡本文独家改进:HWD的核心思想是应用Haar小波变换来降低特征图的空间分辨率,同时保留尽可能多的信息,与传统的下采样方法相比,有效降低信息不确定性。 💡💡💡使用方法:代替原始网络的conv,下采样过程中尽可能包括更多信息,从而提升检测精度。 收录 YO…

Java-File类

目录 前言: 1.File类概述 2.File类属性 3.File类构造方法 4.File类普通方法 前言: 在Java中操作文件主要分为:1.文件系统的操作(File类)、2.文件内容的操作(流对象)。 本节主要介绍Java中的…

数据加密算法多样化的安全需求

数据加密算法是信息安全领域中非常重要的一环,它能够确保数据在传输和存储过程中的机密性和完整性。随着技术的发展,数据加密算法也在不断地演进和改进,以满足更为复杂和多样化的安全需求。 数据加密算法的基本原理是使用加密密钥和加密算法对…

【计算机网络】Socket的SO_REUSEADDR选项与TIME_WAIT

SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后,它的端口可能会在一段时间内处于TIME_WAIT状态,此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口,即使之前的套接字仍处…

Vim实战:使用Vim实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构编译安装Vim环境环境安装过程安装库文件 计算mean和std生成数据集 摘要 论文:https://arxiv.org/pdf/2401.09417v1.pdf 翻译: 近年来,随着深度学习的发展,视觉模型…

JUC并发编程01——进程,线程(详解),并发和并行

目录 1.进程和线程的概念及对比1.进程概述 2.线程3.对比 2.并行与并发1.并发2.并行 3.线程详解3.1.创建和运行线程3.1.1.Thread3.1.2.Runnable结合Thread 创建线程3.1.3.Callable 3.2线程方法APIrun startsleep yieldjoininterrupt打断线程打断 park终止模式 daemon不推荐使用的…

基于Java SSM框架实现校园快领服务系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现校园快领服务系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于校园快领服务系统当然也不能排除在外,随着网络技术的不断成熟,带动了…

骨传导耳机的技术原理是什么?和传统耳机相比有哪些优点?

骨传导耳机通过人体骨骼来传递声音,可以绕过耳道和耳膜直接传达音频到听者的内耳,开放双耳的佩戴方式可以在享受音乐或通话的同时保持对周围环境的感知,这种设计在户外活动或运动等场景下的使用尤为实用,可以避免堵塞耳朵&#xf…

CHS_08.2.3.6_1+生产者-消费者问题

CHS_08.2.3.6_1生产者-消费者问题 问题描述问题分析思考:能否改变相邻P、V操作的顺序?知识回顾 在这个小节中 我们会学习一个经典的进程同步互斥的问题 问题描述 并且尝试用上个小节学习的p v操作 也就是信号量机制来解决这个生产者消费者问题 问题的描…

大力说视频号第三课:视频小店

自从腾讯推出视频号之后,大家非常明显的感觉到,视频号正以势不可挡的姿势走向独立发展。那么,依托于微信生态的视频号,未来将迎来哪些精彩发展呢? 让我们一同来揭开“视频号小店”的神秘面纱,了解一下玩法…

有色金属矿山采选智能工厂数字孪生可视化,推进矿采选业数字化转型

有色金属矿山采选智能工厂数字孪生可视化,推进矿采选业数字化转型。随着科技的不断发展,数字化转型已经成为各行各业发展的必然趋势。有色金属矿采选业作为传统工业的重要组成部分,也面临着数字化转型的挑战。为了更好地推进有色金属矿采选业…

百无聊赖之JavaEE从入门到放弃(十七)时间处理相关类

目录 一.Date 时间类 二.DateFormat 类和 SimpleDateFormat 类 三.Calendar 日历类 “时间如流水,一去不复返”,时间是一维的。所以,我们需要一把刻度尺来表达和度 量时间。在计算机世界,我们把 1970 年 1 月 1 日 00:00:00 定…

张维迎《博弈与社会》多重均衡与制度和文化(4)路径依赖的困惑

在前述计算机产品标准化的问题中,有两个纳什均衡:都生产有5.25英寸软盘驱动器的计算机和都生产有3.5英寸软盘驱动器的计算机。假设一开始企业只能生产有5.25英寸软盘驱动器的计算机,生产3.5英寸软盘驱动器计算机的技术随后出现,企…

Next.js如何正确处理跨域问题?

以前一直使用Vue来写前端。去年下半年接手了一个基于React Next.js的项目,于是顺带学习了一下Next.js。由于Next.js的特点,这个项目的前后端是放在一起的。一开始没什么问题,看了半天文档就上手了。 上周我们需要在另一个网页项目中&#x…

C#,桌面游戏编程,数独游戏(Sudoku Game)的算法与源代码

本文包括以下内容: (1)数独游戏的核心算法; (2)数独游戏核心算法的源代码; (3)数独游戏的部分题目样本; (4)适老版《数独》的设计原则…