详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决
在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,
在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例。
解决方法如下:
1.创建一个工具类代码:
packagecom.hqgd.pms.common;
importorg.springframework.beans.BeansException;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.ApplicationContextAware;
importorg.springframework.stereotype.Component;
/**
*@Description:获取bean对象的工具类
*@Author:yaorong
*@CreateDate:2018/12/10
*/
@Component
publicclassSpringContextUtilimplementsApplicationContextAware{
/**
*上下文对象实例
*/
privatestaticApplicationContextapplicationContext;
@Override
publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
SpringContextUtil.applicationContext=applicationContext;
}
/**
*获取applicationContext
*
*@return
*/
publicstaticApplicationContextgetApplicationContext(){
returnapplicationContext;
}
/**
*通过name获取Bean.
*
*@paramname
*@return
*/
publicstaticObjectgetBean(Stringname){
returngetApplicationContext().getBean(name);
}
/**
*通过class获取Bean.
*
*@paramclazz
*@param
*@return
*/
publicstaticTgetBean(Classclazz){
returngetApplicationContext().getBean(clazz);
}
/**
*通过name,以及Clazz返回指定的Bean
*
*@paramname
*@paramclazz
*@param
*@return
*/
publicstaticTgetBean(Stringname,Classclazz){
returngetApplicationContext().getBean(name,clazz);
}
}
2.使用方法
@Slf4j
@Service
publicclassSerialPortService{
publicstaticSerialPortmSerialport=null;
//privateSimpMessagingTemplatesimpMessage;
privateDataAcquisitionServicedas;
privateSystemServicesystemService;
privateSysParamMappersysParamMapper;
publicSerialPortService(){
this.das=SpringContextUtil.getBean(DataAcquisitionService.class);
this.systemService=SpringContextUtil.getBean(SystemService.class);
this.sysParamMapper=SpringContextUtil.getBean(SysParamMapper.class);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。