在多线程处理问题时,无法通过@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
* @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
@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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!