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

问题说明 :
今天在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("信息批量记录", "推荐商户信息为空");
      }
    }
  }
时间: 2024-10-28 10:30:22

Java(多)线程中注入Spring的Bean的相关文章

activiti任务监听TaskListener的实现类里想注入spring的bean要怎么做?

问题描述 activiti任务监听TaskListener的实现类里想注入spring的bean要怎么做? 1C 请教大家个activiti问题,我在任务监听TaskListener的实现类里想注入spring的bean要怎么做?我@Autowired注入都是null,请大师指点.感谢?

Java Web程序中利用Spring框架返回JSON格式的日期_java

返回Json时格式化日期Date第一步:创建CustomObjectMapper类 /** * 解决SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳的问题.需配合<mvc:message-converters>使用 */ @Component("customObjectMapper") public class CustomObjectMapper extends ObjectMapper { public CustomObjectM

详解Java的MyBatis框架与Spring框架整合中的映射器注入_java

MyBatis-Spring允许你在Service Bean中注入映射器.当使用映射器时,就像调用DAO那样来调用映射器就可以了,但是此时你就不需要进行任何DAO实现的编码,因为MyBatis会为你进行. 使用注入的映射器,你的代码就不会出现任何MyBatis-Spring依赖和MyBatis依赖.在我们的应用中有这样一个简单的映射器.你也应该知道映射器仅仅是一个接口: public interface UserMapper { User getUser(String userId); } 这是

Spring中管理Bean依赖注入之后和Bean销毁之前的行为

    对于Singleton作用域的Bean,Spring容器将会跟踪它们的生命周期,容器知道何时实例化结束.何时销毁.Spring可以管理Bean在实例化结束之后和Bean销毁之前的行为. Bean依赖关系注入之后的行为:     Spring提供了两种方式在Bean全部属性设置成功后执行特定的行为: 在Spring配置文件中使用init-method属性:这个属性指定某个方法在Bean全部依赖关系设置结束后自动执行.这个方法写在Bean里面.使用这种方法不需要将代码与Spring耦合在一起

Java中Spring获取bean方法小结_java

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢? Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机制.BeanFactory使管理不同类型的Java对象成为可能,应用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基础之上,提供

Spring中注入基本类型

  HelloWorld.java package com.xy.Hello; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; /**  * 该方法Spring容器通过setter方法注入  * @author xy  *  */ public class HelloWorld {  public HelloWorld()  {   super();  

java web应用中新起一个线程 在线程中怎么获取系统登录的数据

问题描述 java web应用中新起一个线程 在线程中怎么获取系统登录的数据 java web应用中新起一个线程 在线程中怎么获取系统登录的数据,系统登录用的是Spring Secrity 解决方案 可以使用缓存,自己写一个缓存类.或者使用Redis.

java中利用spring cache解耦业务中的缓存

虽然以前实现缓存的方式,是定义了缓存操作接口,可以灵活实现不同的缓存,可毕竟精力有限,要完成不同的缓存实现也是件麻烦的事.更要命的是,业务代码中有大量缓存操作的代码,耦合度太高,看着很不优雅. 所以呢,抽空了解了一下其它实现方案.这不,spring3.1开始,支持基于注解的缓存,算是目前我比较可以接受的一种方案吧.学完之后还是做一下笔记吧. spring cache是一套基于注解实现的缓存技术,其本身是并不是具体实现,不过默认实现了ConcurrentMap和EHCache实现的缓存.当然也是支

spring-使用Spring在Service中注入了Dao的对象,在Service中怎么获取Dao的对象

问题描述 使用Spring在Service中注入了Dao的对象,在Service中怎么获取Dao的对象 使用Spring在Service中注入了Dao的对象,然后在Service中需要使用Dao对象的话,可以用ApplicationContext的getBean方法,我这边看的一个程序没有用ApplicationContext,而是在Service中对Dao对象进行了声明,然后定义了Dao对象的set和get方法,这样也可以吗,还是说这个程序我没有看明白,希望有明白的可以给解释一下,另希望有大神