千家信息网

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

发表于:2024-10-14 作者:千家信息网编辑
千家信息网最后更新 2024年10月14日,今天就跟大家聊聊有关怎样解决SpringBoot多线程处理任务无法@Autowired注入bean问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所
千家信息网最后更新 2024年10月14日怎样解决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 * @return */ public static T getBean(Class clazz) { return getApplicationContext().getBean(clazz); } /**

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

* @param name

* @param clazz

* @param * @return

*/ public static T getBean(String name, Class 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问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0