详细分析Java中Service报NullPointerException的相关知识(实战Bug)

目录

  • 前言
  • 1. 问题所示
  • 2. 基本知识
  • 3. 原理分析

前言

在Java中,NullPointerException是一种常见的运行时异常,通常发生在尝试访问或操作一个空对象引用(null reference)时

1. 问题所示

在操作代码的时候,浏览器报服务端500的错误

通过后端服务端的代码Debug,发现执行到Service中报NullPointerException的错误
于是看最初始化的位置,发现报null的错误!

如图所示:

在这里插入图片描述

2. 基本知识

常见的错误一般是使用错注入的方式,但我明明已经注入了!??

我们回顾下此类问题的相关知识点,下面是一些可能导致在Service中发生NullPointerException的常见原因和解决方法:

问题所示原因解决方法
未正确初始化对象引用在使用Service时,可能存在未正确初始化对象引用的情况,导致引用为null确保在使用任何对象之前都已经对其进行了正确的初始化。检查在Service中是否正确实例化了相关对象
依赖注入问题如果Service依赖于其他对象,而这些对象未被正确注入,可能导致空指针异常确保使用正确的依赖注入机制(如Spring的@Autowired注解)来注入Service所需的所有依赖
方法返回nullService的某个方法可能返回了null,而调用方未正确处理这种情况在Service中的方法中,明确规定返回值的可能性,并在调用方进行适当的空值检查和处理
条件判断不当在Service中的条件判断中可能存在问题,导致在某些情况下引用为null仔细检查Service中的条件判断,确保它们在所有情况下都能正确处理可能的null情况。
数据库查询返回null如果Service与数据库交互,查询可能返回null,而未进行适当的处理在数据库查询后,进行空值检查,并采取适当的措施,如返回默认值或抛出异常。
使用第三方库时的空指针在使用第三方库时,可能未正确处理其返回值为null的情况阅读并遵循第三方库的文档,确保正确处理可能的null情况
并发问题在多线程环境下,如果没有适当的同步措施,可能导致对象引用在访问时为null使用同步机制,如锁,以确保在多线程环境下正确访问对象引用

以上只是一些可能的原因和解决方法,具体情况可能需要具体分析代码。

在处理NullPointerException时,要注意良好的编程实践,包括空值检查、合理的异常处理和日志记录,以帮助诊断问题。

3. 原理分析

在排查错误的时候需要使用Debug,方便排查!

既然知道我们的Bug是Null,那我们根据上文中的相关知识进行排查

Debug的时候是Service报NullPointerException,且条件和方法是没错的

初始化的时候报Null,说明一开始就初始化不对,且@Autowired此处使用错误

确认此处之后,查看是否有构造类导致无法实例化,或者本身注解过来的方法不可这么使用!

最后证实是构造的时候没有带上以上的实例化属性!

在这里插入图片描述

对于以上问题,总结如下:

对于Controller层中调用的Service方法,需要使用@Autowired注解。但还需要注意该类是否还有构造器,影响bean的注入了!(如果是构造器需要像我这么操作!)

如果不是该bug的缘由,可看上面的相关知识补充,以及下方Spring的相关知识。对于Spring的相关知识可看我这篇文章:

  1. Spring框架梳理总结(适合多刷)
  2. Spring中所有注解详细解析(全)
  3. Spring框架从入门到学精(全)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql - 定点型(DECIMAL)的使用详解及练习

目录 🐶1. 前言: 🐶2. DECIMAL类型简介 🐶3. Decimal使用实战 🥪#结论1:小数位不足会自动补0 🥪#结论2:小数位超出会截断 并按四舍五入处理。 🥪#结论3&#xff1…

数据结构实验7:查找的应用

目录 一、实验目的 二、实验原理 1. 顺序查找 2. 折半查找 3. 二叉树查找 三、实验内容 实验一 任务 代码 截图 实验2 任务 代码 截图 一、实验目的 1.掌握查找的基本概念; 2.掌握并实现以下查找算法:顺序查找、折半查找、二叉树查找。 …

2.RHCSA启动配置

rht-clearcourse 0 #重置练习环境 rht-setcourse rh134 #切换CSA练习环境 cat /etc/rht #查看当前环境 virt-manager #打开KVM控制台 rht-vmctl start classroom #必做,start all不会包含classroom,需…

【Linux】Ubuntu的gnome切换KDE Plasma

文章目录 安装KDE Plasma桌面环境添加软件源并更新apt安装kubuntu-desktop(作者没有成功)aptitude安装kubuntu-desktop多次aptitude install(特别重要特别重要)其他kde软件包 卸载gnome桌面 Ubuntu自带的桌面环境是gnome&#xff…

PSoc62™开发板之rtc时间获取

实验目的 1.使用PSoc62™芯片读取内部rtc时间 2.OLED屏幕显示当前时间戳 实验准备 PSoc62™开发板SSD1306 OLED模块公母头杜邦线 芯片资源 PSoC 6系列MCU时钟系统由以下几部分组成,PSoc62™开发板没有接外部时钟源,所以只能从IMO、ILO、PILO里边配…

EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

这里是CIP资料的协议层级图,讲解协议构造。 ODVA(www.ODVA.org)成立于1995年,是一个全球性协会,其成员包括世界领先的自动化公司。结合其成员的支持,ODVA的使命是在工业自动化中推进开放、可互操作的信息和…

SQL注入实战:Update注入

一:Update注入原理 有的程序员在写源代码的时候,只是对查询的sql语句的用户输入内容进行了过滤,忽略了update 类型sql语句的用户输入的内容的过滤 二、mysql的Update语句复习 update语句可用来修改表中的数据,简单来说基本的使…

算法每日一题: 分割数组的最大值 | 动归 | 分割数组 | 贪心+二分

Hello,大家好,我是星恒 呜呜呜,今天给大家带来的又是一道经典的动归难题。 题目:leetcode 410给定一个非负整数数组 nums 和一个整数 k ,你需要将这个数组分成 k_ 个非空的连续子数组。设计一个算法使得这 k _个子数组…

51单片机电子密码锁Proteus仿真+程序+视频+报告

目录 视频 设计分析 系统结构 仿真图 资料内容 资料下载地址:51单片机电子密码锁Proteus仿真程序视频报告 视频 单片机电子密码锁Proteus仿真程序视频 设计分析 (1)能够从键盘中输入密码,并相应地在显示器上显示‘*’; (2)能够判断密码…

反序列化字符串逃逸(上篇)

首先,必须先明白,这个点并不难,我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符,是不是很简单,哈哈哈! 好了,不闹了,其实: 这里你们只要懂…

【C++ | 数据结构】从哈希的概念 到封装C++STL中的unordered系列容器

文章目录 一、unordered系列容器的底层结构 - 哈希1. 哈希概念2. 哈希冲突 二、解决哈希冲突方法一:合理设计哈希函数🚩哈希函数设计原则🚩常见哈希函数 方法二:开闭散列🚩闭散列线性探测法(实现&#xff0…

Linux操作系统——理解文件系统

预备知识 到目前为止,我们所学习到的关于文件的操作,全部都是基于文件被打开,被访问,访问期间比较重要的有重定向,缓冲区,一切皆文件,当我们访问完毕的时候需要将文件关闭,关闭时那…

Python 生成 图片网页列表 显示路径和建立时间 笔记

Python 一键 生成 图片网页列表 显示路径和建立时间 (方便查看复制路径、重复一键生成) 支持格式:jpg \png\ svg\ webp 图片网页列表 图示: 参考代码: # -*- coding: utf-8 -*- import os import datetime# 指定图片…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题,就八股文相关内容展开进行学习和整理,也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

Stream toList不能滥用以及与collect(Collectors.toList())的区别

Stream toList()返回的是只读List原则上不可修改,collect(Collectors.toList())默认返回的是ArrayList,可以增删改查 1. 背景 在公司看到开发环境突然发现了UnsupportedOperationException 报错,想到了不是自己throw的应该就是操作collection不当。 发…

2.上传图片到Minio服务中

上传图片 界面原型 第一步: 用户在课程信息编辑界面可以上传课程图片或者修改上传的课程图片 第二步: 请求媒资管理服务将课程图片上传至分布式文件系统同时在媒资管理数据库保存文件信息,上传成功后返回图片在MinIO中的地址 第三步: 请求内容管理服务保存课程信息含课程封…

【网站项目】基于SSM的274办公自动化管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【Linux系统编程】进程优先级

文章目录 1. 优先级的基本概念2. 为什么存在优先级3. 查看系统进程4. PRI and NI5. top命令修改已存在进程的nice值6. 其他概念 1. 优先级的基本概念 本篇文章讲解进程优先级,首先我们来了解一下进程优先级的概念: cpu资源分配的先后顺序,就…

burp靶场--访问控制【越权】

【Burp系列】超全越权漏洞实验总结 https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality 1. 访问控制【越权】 https://portswigger.net/web-security/access-control#what-is-access-control ### 什么是访问控制: 访问控…

php基础学习之常量

php常量的基本概念 常量是在程序运行中的一种不可改变的量(数据),常量一旦定义,通常不可改变(用户级别)。 php常量的定义形式 使用define函数:define("常量名字", 常量值);使用cons…