Spring Boot 中 Service 层依赖注入问题

news2024/11/16 7:37:46

目录

问题描述

产生错误

问题原因

解决方法

手动注入方法

        1、使用工具集 hutool,引入 Maven 依赖

        2、编写  SpringUtil  工具类


问题描述

        Controller 层方法为 static 静态,引入 Service 层时使用 @Autowired 注解自动装配,Controller层方法里无法调用Service层,于是加static修饰Service层的注入

产生错误

调用Service层进行数据库操作时,注入的Service层报空指针异常( NullPointerException 

问题原因

静态变量需要在实例化后才能使用,而静态变量没有实例化时为null,导致空指针异常。

static 与 @Autowired 注解冲突,导致自动装配拉胯

解决方法

  1. 去掉  static 修饰符
  2. 手动注入

手动注入方法

        1、使用工具集 hutool,引入 Maven 依赖

 <!--工具集-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.12</version>
        </dependency>

根据类装配  Bean ,或其它方式

SpringUtil.getBean(Service.class); 

        2、编写  SpringUtil  工具类

package com.lesliecheung.util.spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @Package_Name com.lesliecheung.util.spring
 * @Author yi.li/Leslie Lee
 * @TIME 11:57
 * @Version 1.0
 * spring工具类
 */
@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
    }

    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}

使用 static 静态块初始化

 

                                                                Cheung Kwok Wing 随笔

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

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

相关文章

支持下一代网络IpV6的串口服务器,IpV6串口485接口转网口

和IPv4比较&#xff0c;IPv6有两个极具吸引力的特点&#xff1a;一个是IPv6采用的128位地址格式&#xff0c;而IPv4采用32位的地址格式&#xff0c;因此IPv6使地址空间增大了296&#xff1b;另一个是IPv6物联网数据业务具有更强的支持能力&#xff0c;成为未来物联网的重要协议…

解锁一些SQL注入的姿势

昨天课堂上布置了要去看一些sql注入的案例&#xff0c;以下是我的心得&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ 1.新方法 打了sqli的前十关&#xff0c;我发现一般都是联合查询&#xff0c;但是有没有不是联合查询的方法呢&#xf…

2.2.分支结构-if语句

if语句的语法格式&#xff08;一&#xff09; if(布尔表达式){ // 语句 } 如果布尔表达式结果为true&#xff0c;执行if中的语句&#xff0c;否则不执行。 if语句的语法格式&#xff08;二&#xff09; if(布尔表达式){ // 语句1 }else{ // 语句2} 如果布尔表达式结果为true&a…

探索 SOAP:揭开 Web 服务的神秘面纱(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

PyInstaller 将 Python 程序生成可直接运行的程序

图标转换地址&#xff1a;https://convert.app/#google_vignette 官方文档&#xff1a;https://readthedocs.org/projects/pyinstaller/downloads/pdf/stable/#page20 安装pyinstaller pip install pyinstaller执行打包 pyinstaller -i ./resource/w.icns -w -F whv.py --a…

HarmonyOS漫谈---套壳安卓还是套壳苹果?HarmonyOS更像谁?

2020年以前华为手机的操作系统是EMUI,这个是在Android基础上扩展而来的,版本和android几乎一致,和市面上其它android手机厂家搭载的系统并无本质不同 2019年5月16日,美国针对华为发起了第一轮制裁。8月华为发布了HarmonyOS1.0,此时还只是主要在IOT设备上使用,智慧屏成为…

CSS基础细节学习

一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称&#xff0c;有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言&#xff0c;CSS主要用于设置HTML页面中的文本内容(字体、大小对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面…

概念性——了解 SQL 约束

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 概念性——了解 SQL 约束 介绍 在设计数据库时&#xff0c;有时我们可能希望对某些列中允许的数据进行限制。例…

QT发生弹出警告窗口

QTC开发程序弹出警告窗口&#xff0c;如上图 实施代码&#xff1a; #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误&#xff0c;请检查您的操作。");}上面的文字可以更改&#x…

python实现的简化版构建Kdtree(k=2)

Python Kdtree 使用示例 文章目录 Python Kdtree 使用示例一、关于 KDTree二、关于最近邻搜索三、复杂度分析四、python实现的简化版构建k-d tree&#xff08;k2&#xff09; 一、关于 KDTree 点云数据主要是&#xff0c; 表征 目标表面 的海量点集合&#xff0c; 并不具备传统…

【云原生】Docker私有仓库搭建以及四大容器重启策略

目录 一、registry私有仓库 步骤一&#xff1a;先拉取registry的镜像 步骤二&#xff1a;修改docker的配置文件重启 步骤三&#xff1a;基于registry镜像启动一个容器&#xff0c;可以设置为always重启策略 步骤四&#xff1a;修改想要上传的镜像的标签并上传验证 步骤五&…

vulnhub靶场之Five86-2

一.环境搭建 1.靶场描述 Five86-2 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The ultimate goal of this challenge is to get root and to read the one and only flag. Linux skills and fa…

LVGL移植准备

一.LVGL移植关键&#xff08;框架&#xff09; 显示驱动&#xff1a;实现与目标平台兼容的显示驱动程序&#xff0c;包括初始化显示设备、绘制像素和设置显示区域等功能。确保与LVGL库进行交互的正确性和有效性。 输入设备驱动&#xff1a;适配目标平台的输入设备驱动程序&…

世界渲染大赛多久一届?

世界渲染大赛&#xff0c;又名世界3D渲染挑战赛&#xff0c;是国外艺术家Pwnisher开启的知名赛事&#xff0c;非常受欢迎。在这个比赛中&#xff0c;你可以看到世界各地不同艺术家进行的创意和主题比拼&#xff0c;有极高的欣赏价值和审美标准。 那么这个比赛举办时间是多少呢&…

C#反射详解

一、反射是什么 1、C#编译运行过程 高级语言->编译->dll/exe文件->CLR/JIT->机器码 2、原理解析 metadata&#xff1a;元数据数据清单&#xff0c;记录了dll中包含了哪些东西,是一个描述。 IL&#xff1a;中间语言&#xff0c;编译把高级语言编译后得到的C#中…

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] &#xff1f; 答案是空字符串 为什么呢&#xff1f; 当做加法运算的时候&#xff0c;发现左右两端存在非原始类型&#xff0c;也就是引用类型对象&#xff0c;就会对对象做隐式类型转换 如何执行的&#xff1f;或者说怎么查找的&#xff1f; 第一步&…

网络安全02--负载均衡下的webshell连接

目录 一、环境准备 1.1ubentu虚拟机一台&#xff0c;docker环境&#xff0c;蚁剑 1.2环境压缩包&#xff08;文件已上传资源&#xff09;&#xff1a; 二、开始复原 2.1上传ubentu&#xff1a; 2.2解压缩 2.3版本20没有docker-compose手动下载&#xff0c;包已上传资源 …

netty源码前置一:Nio

NIO算是实现Reactor设计模式&#xff08;单Selector 单工作线程&#xff09;底层window用的是select&#xff0c;linux用的是epoll 网络NIO代码实现&#xff1a; public NIOServer(int port) throws Exception {selector Selector.open();serverSocket ServerSocketChannel.…

逻辑回归(Logistic Regression)和正则化

1.分类问题 案例&#xff1a; 在分类问题中&#xff0c;我们尝试预测的是结果是否属于某一个类&#xff08;例如正确或错误&#xff09;。分类问题的例子有&#xff1a;判断一封电子邮件是否是垃圾邮件&#xff1b;判断一次金融交易是否是欺诈&#xff1b;之前我们也谈到了肿瘤…