spring 在Thread中注入@Resource@Autowired失败,总为null~解决

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析) 本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。 阅读详情

参考:http://bailong139.blog.163.com/blog/static/2072381002014630114537506/

背景:

       我用@service或者@resposity声明了一个bean,给sping管理。现在我有个需求,就是用到Thread去监控,但是这个线程需要用我的service或者dao,然后我习惯性的在继承了Thread类或者实现了Runnable的类里写了如下:
   @Resource
  private MyService myService;
  但是运行的时候,进入到这个线程,这个myServcie总为null,也就是注入失败。
解决办法:
1.第一种(可以)
就是我在启动这个线程的时候,在这个线程的构造函数中把我的service实例传过去,然后再启动。
new MyThread(myService).start()
private MyService myService;
this.myService=  SpringUtils.getApplicationContext().getBean(MyService .class);
public class SpringUtils implements ApplicationContextAware{

	private static ApplicationContext applicationContext;
	
	@SuppressWarnings("static-access")
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		this.applicationContext = applicationContext;
		
	}

	public static ApplicationContext getApplicationContext(){
		return applicationContext;
	}
	
	public static Object getBean(String name) throws BeansException{
		return applicationContext.getBean(name);
	}
}
2.第二种(可以,未亲测)
就是让我的service或者dao的实现类实现Runnable这个接口,然后把你的线程的逻辑写在run方法里,启动的时候,直接this.start()就行。注意除了要在service的实现类中实现Runnable接口外,还应该在service接口中继承Runnable接口。
对于我的情况,我是直接在dao里实现了Runnable,然后用的线程池启动的,如下:pool.execute(this);

3.还有就是直接new一个实例。
但是new一个实例,session = localSessionFactory.getCurrentSession(); 这个localSessionFactory也是注入进去的,这里会报null.
@Autowired
public SessionFactory localSessionFactory;

电子产品设计中EFT防护的关键技术与实践 本文深入探讨了电子产品设计中EFT(快速瞬变脉冲群)防护的关键技术与实践。文章从EFT干扰的原理入手,系统阐述了通过优化PCB布局与地平面设计、构建电源与信号端口滤波防护电路、精选核心器件以及实施软件容错策略,来构建多层次、系统性的抗干扰防线,助力产品稳定通过严苛的电磁兼容测试。 阅读详情

相关推荐

STM32H743IIT6上LVGL移植实战:从零到触摸屏驱动的完整配置流程

本文详细记录了在STM32H743IIT6高性能MCU上,从零开始移植LVGL图形库到7寸RGB触摸屏的完整实战流程。内容涵盖工程搭建、显示与触摸驱动配置、LVGL核心优化及常见问题排查,重点讲解了如何利用STM32H743的硬件特性(如DMA2D、LTDC)提升GUI性能,为嵌入式GUI开发提供了一份详实的配置指南。

spark7igniter的博客 549

spring boot多线程@Autowired注入失效解决方案

spring boot多线程@Autowired注入失效解决方案 在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常, 在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例。那我们只有手动获取, 解决方案如下: 本类是获取bean的工具类,也是交给spring管理,通过程序的上下文获取,在需要注入bean的类中,使用构造方法调用对应获取bean的...

qq_42938851的博客 2820

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

Spring在异步中无法自动注入(@Autowired)实例问题

Spring在异步中无法自动注入(@Autowired)实例问题

偉ing的博客 1427

安卓APP通过CH340实现USB串口通信与设备检测

本文详细介绍了安卓APP通过CH340芯片实现USB串口通信与设备检测的完整流程。从CH340芯片的基础原理到开发环境搭建,再到串口通信的具体实现和错误处理,提供了全面的技术指导。文章还分享了USB热插拔处理、自动重连策略以及性能优化等实战技巧,帮助开发者高效完成安卓与嵌入式设备的通信开发。

weixin_42531925的博客 380

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3121

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

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

piaomiao_的博客 3913

SSE(Server-Sent Events)完整使用示例

本篇使用Node.js 作为服务端,在浏览器客户端演示SSE的完整实例和演示。实现了一个基于 Server-Sent Events (SSE) 的实时数据推送功能。

oscar999的专栏 750

解决多线程之线程中无法用@Autowired注解注入bean问题

当我们在new Thread时,在run()方法中注入一个service发现注入的service为null。原因是new Thread不在spring容器中,也就无法获得spring中的bean对象,所以我们只能通过ApplicationContext手动来获取bean。 我这里的环境是springboot1.5.9 package com.iacp.config; import org.springframework.beans.BeansException; import org.springfr.

it_erge的博客 3146

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

如何使用Docker部署OpenClaw小龙虾(docker compose快速部署)

本文以飞牛NAS为例💻,带大家一步步完成Docker部署OpenClaw小龙虾🦞。不管你是用NAS、云服务器还是本地电脑,只要支持Docker,都可以参考这个步骤来安装部署⚡

XiaoqiangClub的博客 727

new出来的线程类中无法使用@Autowired注入Bean

根本原因: @Autowired注入Spring Bean,则当前类必须也是Spring Bean才能注入成功,不能用new xxx()来获得对象,这种方式获得的对象也无法使用@Autowired注解注入Bean。 因此,当我们在new一个线程之后,发现线程里使用@Autowired注入的对象都是空的 解决方法: 1、使用一个类实现ApplicationContextAware接口 @...

ystyaoshengting的专栏 2213

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 940

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

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

宋忠瑾的博客 2320

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

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解决多线程Thread无法通过Spirng自动注入的方式载入类

问题描述 我们在写多线程Thread的实现过程时,通常会用到注入的方法,但是在继承Runnable接口或者Callable接口时,是无法让Spring自动注入Service方法的。所以@Autowired在继承Runnable接口或Callable接口中是无效的。 解决办法 通过手动注入方法可以解决该问题。下面的工具类代码即可解决这方面问题。 import org.springframework....

伊格尼斯 2853

假人有限元模型

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

线程中@Autowired无法注入@service的问题浅谈

今天遇到了一个在线程中自动注入service的问题,service始终都是空的,看了些前辈的解决方法 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.Applicat...

m746318539的博客 5454

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_42826932的博客 1万+

(@AutoWired)spring对多线程Bean无法注入的原因(含解决方案)

多线程无法注入Bean原因: 在spring中,如果需要在异步线程中注入bean,会发现bean是空的情况。原因据说是spring bean 出于线程安全考虑,不得注入bean至线程类(Runnable接口的派生类)。 spring中Bean的注入方式: 1、Aop注解形式 @AutoWired、@Resource。前提是对应的类要带上组件(如@Component) 2、通过在spring配置文件...

weixin_39071823的博客 3632

多线程任务中@Autowired或@Resource无法注入bean问题

在多线程处理问题时,当使用@Autowired或@Resource注入的bean时,报空指针异常。有如下两种解决方案。该方法为网上所查得到,本人遇到问题时用该方法并没有很好的解决问题。1.实现ApplicationContextAware接口。2.直接new所需要的类。

weixin_43119856的博客 1239

Java Spring 多线程 @Autowired和@Resource注入问题

Java Spring 多线程 @Autowired和@Resource注入问题1. 背景在项目中出现了spring@Autowired注入后对象是NULL的问题。2. 解决方案网上解决方案都是抄来抄去,主要也就是那么几篇,我这里主要参考的是 将需要注入的对象设置成static,并去掉其@Autowired标签,并为该对象设置set方法,而且要在该方法前加入@Autowired标签,这样的话在运

sl_950313的专栏 1677

@Scope(BeanDefination.SCOPE_PROTOTYPE)在多线程环境下不能使用@Autowired或者@Resource注入

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象,具体可参见文章:http://blog.youkuaiyun.com/gst6062825/article/details/8765157 但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此...

Laputa_Spring 1580

Spring Boot @Autowired注入为空的原因及解决方法

综上所述,Spring Boot @Autowired注入为空的原因可能是未正确配置@Component或@Bean注解、Spring Boot上下文无法扫描到被注入的对象、被注入的对象未被正确实例化、运行时代理问题以及依赖注入顺序问题。通过正确配置注解、扫描路径,确保对象被正确实例化,使用其他注解进行依赖注入,或者改变依赖注入方式,我们可以解决@Autowired注入为空的问题,确保依赖注入的成功。解决方法之一是使用setter方法注入或使用字段注入,这些方式可以绕过构造函数注入导致的循环依赖问题。

DevNinja的博客 3724

Thread子类中 通过Autowired注入bean失效,发生空指针错误,解决方式两种 1 构造函数 2内部类方式

将线程类作为服务类的内部类,可以方便直接使用外部类中注入的bean。如下面的代码,需要注入ItemMapper,有如下两种解决方案。方案1 :将需要的Bean作为线程的的构造函数的参数传入。

小哇 877

Spring在Thread中注入Bean无效的解决方式[嗡汤圆的小笔记]

在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务。而通过Spring注入来管理和使用服务是较为合理的方式。但是若直接在Thread子类中通过注解方式注入Bean是无效的。因为Spring本身默认Bean为单例模式构建,同时是非线程安全的,因此禁止了在Thread子类中的注入行为,因此在Thread中直接注入的bean是null的,会发生空指针错误。以下分别列举错误

嗡汤圆的博客 1万+

多线程无法使用@Autowired注入问题

当我们使用线程池执行任务时,想给线程注入一个service,但是运行时发现service总是为null。根据Bean生命周期,能够被Spring管理的Bean都是在扫描范围内并且有 @Componen、@Service、@Configuration 等注释,在使用时才能用IOC注入对象。如果使用new 关键字手动生成的对象,Sring感知不到,无法管理。

xmbcc777的博客 508

Spring常见的坑

Spring Bean的默认名称生成策略导致的空指针 源码分析:public static String decapitalize(String name) { if (name == null || name.length() == 0) { return name; } //如果类名长度大于1,且第一个和第二个都是大写,会自动返回原类名(CUstomer ==>CUstomer) if (name.length() > 1 && C...

qq_44447372的博客 390
上一篇: Java多线程--主线程等待所有子线程执行完毕
下一篇: Hibernate学习(2)
zqqnancy
博客等级 码龄16年 9粉丝 20原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值