软件编程
位置:首页>> 软件编程>> java编程>> 详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

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

作者:EVAO_大个子  发布时间:2022-09-19 19:35:17 

标签: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
*/

@Component
public 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
@Service
public 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);
 }

}

来源:https://segmentfault.com/a/1190000019399523

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com