详解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 */ publicstatic TgetBean(Class clazz){ returngetApplicationContext().getBean(clazz); } /** *通过name,以及Clazz返回指定的Bean * *@paramname *@paramclazz *@param *@return */ publicstatic TgetBean(Stringname,Class clazz){ 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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。