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

今天就跟大家聊聊有关怎样解决SpringBoot多线程处理任务无法@Autowired注入bean问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,

在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例。

解决方法如下:

1.创建一个工具类代码:

package com.hqgd.pms.common;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;

/** * @Description: 获取bean对象的工具类 *

@Author: yaorong * @CreateDate: 2018/12/10 *

/@Componentpublic class SpringContextUtil implements ApplicationContextAware { 

 /**   * 上下文对象实例   */  private static ApplicationContext applicationContext;  

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

 /**   * 获取applicationContext   *   

* @return   *

/  public static ApplicationContext getApplicationContext() {    

return applicationContext;  }  /**   

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

* @param clazz   

* @param <T>   * @return   */  public static <T> T getBean(Class<T> clazz) {    return getApplicationContext().getBean(clazz);  }  /**   

* 通过name,以及Clazz返回指定的Bean   *  

 * @param name   

* @param clazz   

* @param <T>   * @return   

*/  public static <T> T getBean(String name, Class<T> clazz) {   

 return getApplicationContext().getBean(name, clazz); 

 }}

2.使用方法

@Slf4j@Servicepublic class SerialPortService {  

public static SerialPort mSerialport = null;

//  private SimpMessagingTemplate simpMessage;  

private DataAcquisitionService das;  private SystemService systemService;  private SysParamMapper sysParamMapper; 

 public SerialPortService() {    

this.das = SpringContextUtil.getBean(DataAcquisitionService.class);   

 this.systemService = SpringContextUtil.getBean(SystemService.class);    

this.sysParamMapper = SpringContextUtil.getBean(SysParamMapper.class);

  }}

以上就上有关详解SpringBoot多线程处理任务无法@Autowired注入bean问题解决的全部内容,本站全面介绍编程技术、操作系统、数据库、web前端技术等内容。

看完上述内容,你们对怎样解决SpringBoot多线程处理任务无法@Autowired注入bean问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注本站行业资讯频道,感谢大家的支持。

相关推荐:

SpringBoot + Mybatis + MySQL 中如何优化需要特殊处理的字段?

特殊字段处理:springboot+mybatis+mysql mysql中字段设计的优化对数据处理有着重要的影响。本文将探讨如何处理需要特殊处理的字段,以满足业务逻辑需求。 问题示例 假设有一个实体类school,其中包含a、b和c字段。要求fieldc的值由a和b的值拼接而成,例如,当a=22和...

Springboot如何查询MySQL DATE字段?

springboot日期查询mysqldate字段时的问题 在使用springboot查询mysqldate字段时,可能会遇到日期类型不匹配的问题。这是因为springboot接收时间时默认为timestamp类型,而mysqldate字段是日期类型。 解决方案 解决方法是将前端传来的日期字符串直接...

好程序员Java学习路线分享Spring创建Bean的3种方式

好程序员Java学习路线分享Spring创建Bean的3种方式,本文讲解了在Spring应用中创建Bean的多种方式,包括自动创建,以及手动创建注入方式,实际开发中可以根据业务场景选择合适的方案。方式1:使用SpringXML方式配置,该方式用于在纯Spring应用中,适用于简单的小应用,当应用变得...

SpringBoot启动机制(starter机制)核心原理详解

作者:MyBug 一、前言 使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,这次主要是分析springboot特性自动装配。那么首先带领大家回顾一下以往...

SpringBoot实现PDF添加水印的方法

本篇文章和大家了解一下SpringBoot实现PDF添加水印的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介PDF(PortableDocumentFormat,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对...

SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

一、异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。 1、业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性。常见的业务异常提示:1)请输入xxx2)xxx不能为空3)xxx重复,请更换 2、系统异常 系统异常主要是一些不...

SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景

一、拦截器简介 1、拦截器定义 拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。拦截器主要用来按照指定规则拒绝请求。 2、拦截器中应用 Token令牌验证 请求数据校验 用户权限校验 放行指定接口 二、SpringBoot2.0拦截器用法 1、编写两个...

SpringBoot配置Controller实现Web请求处理的方法

今天小编给大家分享的是SpringBoot配置Controller实现Web请求处理的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。Controller处理请求由于在建立SpringBoot项目时选择的Web>SpringWeb,M...