Java(多)线程中注入Spring的Bean

来源:互联网 发布:淘宝淘金币兑换区 编辑:程序博客网 时间:2024/05/21 06:45

问题说明 :
今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被注入,bean对象的值为null。

原因分析 :

web容器在启动应用时,并没有提前将线程中的bean注入(在线程启动前,web容易也是无法感知的)

解决方案 :

线程中获取bean

import org.springframework.context.ApplicationContext;public class ServiceFactory {    public static  ApplicationContext context=null;    public static Object getInstance(String serviceName){        if (null==context) {            context=ApplicationContextLoaderListener.getApplicationContext();        }        return  context.getBean(serviceName);    }}
  @Override  public void run() {    // 记录推荐记录    GfRegistrationService gfRegistrationService =        (GfRegistrationService) ServiceFactory.getInstance("gfRegistrationService");    List<GfRegistration> insertRegistrationlist = this.getGfRegistrationlist();    if (insertRegistrationlist.size() > 0) {      int[] resultArry = gfRegistrationService.batchInsert(insertRegistrationlist);      if (resultArry.length > 0) {        logger.info("信息批量记录", "批量记录信息,length= " + resultArry.length);      } else {        logger.info("信息批量记录", "推荐商户信息为空");      }    }  }
0 0