温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-14 16:50:42 来源:亿速云 阅读:406 作者:柒染 栏目:编程语言

今天就跟大家聊聊有关怎样解决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问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI