技术笔记:多线程(Runnable)类或者是监听器中使用Autowired自动注入出现null的问题

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7) 主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在 阅读详情

一、原因分析:

在多线程时使用@Autowired总是获取不到bean,原因是:new thread不在spring容器中,也就无法获得spring中的bean对象

 

二、解决方案:

手动获取

 

代码实现如下:

package com.test.configs;
 
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
 
@Component
public class BeanContext implements ApplicationContextAware {
 
	private static ApplicationContext applicationContext;
	
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		BeanContext.applicationContext = applicationContext;
	}
	
	public static ApplicationContext getApplicationContext(){
		return applicationContext;
	}
	
	@SuppressWarnings("unchecked")
	public static <T> T getBean(String name) throws BeansException {
		return (T)applicationContext.getBean(name);
	}
	
	public static <T> T getBean(Class<T> clz) throws BeansException {
	    return (T)applicationContext.getBean(clz);
	}
}

 

线程类中的使用使用方法:

package com.test.handler;
 
import com.test.configs.BeanContext;
import com.test.service.TestService;
import com.test.model.User;
 

public class TestHandler implements Runnable {
 
    private User user;
    private TestService testService;
    @Override
    public void run() {
        this.testService= BeanContext.getApplicationContext().getBean(TestService.class);
        //这里就可以使用service逻辑接口中的方法了
        User user=testService.queryUserById(11);
    }
 
    public User getUser() {
        return user;
    }
 
    public void setUser(User user) {
        this.user = user;
    }
}

 

若是是监听器类的话,只需要在监听器的执行方法中执行下面的代码就可以实现:

TestService testService= BeanContext.getApplicationContext().getBean(TestService.class);

 

至此,多线程类中使用调用service接口为null的问题就搞定了!

 

Matcap与菲涅尔 菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入? 阅读详情

相关推荐

ROS2初级面试题汇总

总结和收集了一些关于ros2的问题和解答记录

qq_57633442的博客 5571

在监听器中使用@Autowried调用service层包null的解决方案

公司做热备份时,需要检测当前的硬件和卫星是否为告警状态,检测到后就新建一个标识(空文件)。 刚开始,我在监听器中调用server层后来获取需要的数据,发现始终是为空。于是参考了网站相关的资料发现是因为监听器是由servlet调用的,而@Autowried是由spring来进行管理的,结果当然为空咯。总结的以下几个解决方案: 【1】使用WebApplicationContextUtils.get

dq_cc的博客 2378

Unity类银河恶魔城学习记录1-10 PlayerWallJump源代码 P37

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考

Homura_的博客 1379

springboot @Autowired 为空解决方案

spingboot @Autowried 注入为null 解决方案 总结 链接1https://blog.youkuaiyun.com/weixin_38437520/article/details/123589960 链接2https://www.codeleading.com/article/1865853439/

fhrush的博客 3212

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7275

搭建微信机器人的方案都在这了!

功能超级强大,虽不支持二次开发,但已有的功能足够个人使用,可惜官方作品已被腾讯告死,好在市面上还流落着不少破解版,有需要的自行搜索。可惜的是,微信官方已不准许新的微信号再使用 web 登录,这就直接从源头扼杀了 web 协议的微信机器人,虽说老的微信号还是能凑合着用,不过部分功能也受限。所以,这些都属于 PC 端的微信机器人。无论是 PC 端还是手机端,用 hook 方式实现的最大缺点就是要和某一个版本的微信客户端进行绑定,如果框架本身不对最新版本的微信适配,那使用的时候就无法升级到最新版本的微信。

weixin_47246330的博客 1万+

多线程中 获取不到 @Autowired 和@Resource 注入的对象

多线程中 获取不到 @Autowired 和@Resource 注入的对象 老是提示空指针异常 可以使用工具类 手动获取改对象 工具类: package top.canye.sys.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.Applic...

haodiaoji9386的博客 569

Windows10下安装VMware16虚拟机

由于本人系统为Windows 10 家庭中文版,无法安装Linux子系统WSL,虽然网上也有强制安装的方法,但为保险起见,还是把之前的VMware虚拟机重新进行安装,并浅浅记录一下安装过程。

沉香best的博客 864

@Autowired 注入为null 的原因与解决方式

我们经常会通过@Autowired注解将某个类注到另一个类中,但是会发现注不进去,报NULL。可能的原因有一下几种:(1)该类没有托管给spring 管理一般在类的上面添加@Component就可以了(2)你的这个类有被new出来的实例的,new 过的对象不会交给Spring容器管理 所以里面的 service或者dao注入不进来。一般是指引用某些框架,你是继承某个接口,但是这些框架默认new过这个方法,比如MVC拦截的HandlerInterceptor类。

weixin_42826932的博客 1万+

Modbus协议学习第一篇之基础概念

因工作需要而接触Modbus,正在恶补知识,利用博客的方式来加深理解和记忆,同时希望同行大佬能一起交流。

hzf978742221的博客 881

[RAM] DRAM 导论:DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生

有数据的地方就有存储, 内存是谁都离不开的产品。而动态随机存取存储器(DRAM)作为一种常见的内存。本博客将介绍DRAM的基本概念、工作原理、优缺点以及应用领域等方面。

串起点滴 3920

多线程run方法获取不到@Autowired注入bean对象

获取bean对象的工具类,既然程序无法通过注解拿到需要的bean,那就只好自己写个工具类来获取喽,下面是工具类代码 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.Ap...

小涛Dirge 3811

yolov26改进 | Neck/颈部创新篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov26(全网独家创新)

本文提出了一种创新的分层特征融合模块HFFB(Hierarchical Feature Fusion Block)来改进YOLOv26的neck部分,构建了名为HFPN的新型特征金字塔网络。该模块通过三分支结构融合局部特征(CNN提取)、全局特征(Swin Transformer提取)和中间特征,并包含空间注意力(SA)、通道注意力(CA)和残差反向MLP(IRMLP)等组件来优化特征融合效果。实验表明,该方法能针对不同尺度目标(大/中/小)进行自适应检测,可根据具体数据集需求选择不同配置。文章详细提供了核

Snu77的博客 485

Log4j2全局logId配置指南:从MDC到异步与微服务透传

在分布式系统和复杂应用中,日志是诊断问题的关键。传统依赖时间戳和线程名的日志记录方式,在异步、高并发场景下难以串联请求的完整轨迹,导致问题排查效率低下。其核心原理是为每个请求分配一个全局唯一的标识符(如logId或traceId),通过线程上下文(如MDC)进行传递,使同一次请求在所有相关日志行中携带相同ID,从而实现端到端的追踪。这项技术的核心价值在于将杂乱的日志信息转化为可串联、可分析的诊断数据,极大提升了线上问题的定位速度和系统可观测性。典型的应用场景包括Web请求追踪、微服务调用链路还原以及异步任务

weixin_30268071的博客 365

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

黑马点评项目 | Redis学习笔记「纯享版」10w字超详细总结(含资料)

这次笔记是本人二刷Redis实战篇黑马点评的8w字汇总笔记。如果需要资料,于本文末尾查找即可

2025优快云博客之星Top246,后端开发技术领域新星创作者。 3万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2026最新Java八股文(完整版)

单个redis节点的并发能力是有限的,所以为了提高并发能力,我们需要搭建redis集群,就比如:主从复制。主从复制的流程主从复制主要分为:全量同步和增量同步。全量同步:在salve请求数据同步的时候会携带application Id和offset,如果master判断出applid和自己的不一样,就认为slave是第一次进行同步,所以会进行全量同步。

Ostkakah的博客 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java线程池方式执行run任务及在线程run方法中注入service解决方案

背景:接口1内需要调用接口2,接口2功能是执行一个长时间任务,执行完成后才会返回结果(比如执行5min后获取到执行结果),但是接口1内调接口2时不能等待5min后才返回结果,接口1需要返回自己的结果 方式:以线程池方式来执行任务,接口1触发接口2后不等待,直接返回自己的内容或做其他操作,将接口2的任务扔进线程池中任其执行,执行完了后可以接着做其他操作 在线程run方法中注入service 在线程的run方法中使用@Autowired注解获得Service层实例,调用service层方法是报空指针: 原因:

Ny992的博客 1446

多线程使用案例,解决多线程@Autowired无法注入接口方法。

1.controller层, 我这是一个同步任务接口,我这里批量同步考虑到如果使用多线程可以解决进程阻塞的问题,使用多个同步任务并行处理。 2.service层 2.1第一个方法是调用线程,参数是一个list 使用for循环依次往线程池添加任务。 2.2第二个是一个Runnable 线程的run()调用的方法进行封装了 这也是出现线程无法@Autowired的问题来源,注解使用了,但是执行代码发现报空指针,所以这个注入没有生效。如何解决往下看。 3.Service层实现 implements Physi

宋忠瑾的博客 2320

多线程注入对象@Autowired 注入为空的4种解法

前言 当我们使用多线程时,想给线程注入一个service,但是运行时发现service总是为null。 举个????: public class MyThread implements Runnable { @Autowired Service application; public void run() {} } 原因 new Thread不在spring容器中,也就无法获得spring中的bean对象。根据SpringBean的生命周期,能...

piaomiao_的博客 3913

java疑难杂症:多线程下@Resource和@Autowired和@Value 注入为null的解决办法

@Resource和@Autowired注入为null

qq_29677283的博客 1980

Spring项目中多线程通过@Autowired注入bean对象一直为null问题

Spring项目中多线程通过@Autowired注入bean对象一直为null问题 转自https://blog.youkuaiyun.com/qiuqiu886/article/details/102565029?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_r

zdw_zoro的博客 3236

Java解决多线程无法@Autowired注入,手动获取Bean对象

问题 当我们使用多线程时,又想注入一个service给我们使用,但是我们发现service总是为null。 原因 new Thread不在spring容器中,也就无法获得spring中的bean对象。 解决方案 1.最简单的方法 把要注入的service通过构造方法传过去 2.通过ApplicationContext手动获取Bean(Springboot版本,其他自行百度) 定义congfig package cn.pconline.config; import org.sprin..

zhy1805的博客 1064

Runnable 注解注入

一构造函数的形式传入注解即可 public class RunnableTask implements Runnable { private int projectId; private TransactionService transactionService; // 这个就是注解注入 RunnableTask() { } // 注解在别的...

张小凡 5419

SpringBoot 多线程处理任务无法@Autowired注入bean问题解决

在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例。 解决方法如下: 1.创建一个工具类代码: //手动获取Spring中的bean 注意这个类要一定交给spring来管理 @Component public class BeanContext implements ApplicationC...

ruoxiyun的博客 2722

SpringBoot 自动注入与多线程

一搜类似标题网上都是说多线程下不能自动注入,需要一个实现ApplicationContextAware的工具类来从spring容器中获取bean,然后在线程的构造方法中完成赋值。我就有些纳闷,你不用spring注入的线程对象当然不能自动注入线程内的对象了。 所以我觉得正确的操作应该是,用 @Component @Scope(ConfigurableBeanFactor...

找不到的博客 1408

线程中使用@Autowired注入

线程中使用@Autowired注入场景工具RestTemplate代码实现 场景 多多线程同时访问接口,测试接口稳定性 工具RestTemplate 使用springboot自带http调用 线程类实现Callable 代码实现 一下是通过@Autowired注入的方式 public static void main(String[] arge){ Future p = pool.submit(new RunnableUtil(url, urlSuffixInsertNews, bo

weixin_45723335的博客 1790
上一篇: 技术笔记:使用ajax实现登录的时候,就算执行成功了也一直在执行error,没有执行success
下一篇: 技术笔记:解决emoji表情存入mysql数据库中,出现报错的问题
堂前燕Tornado
博客等级 码龄14年 468粉丝 130原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

堂前燕Tornado

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值