线程中调用service方法出错

public class PnFileTGIComputeThread implements Runnable {
    @Resource
    private AppUsedService   appUsedService;
//    AppUsedService appUsedService = (AppUsedService) AllBean.getBean("appUsedService");
    public  String taskId;
    public  int  cityId;
    public PnFileTGIComputeThread(String name, int cityId){
        this.taskId = name;
        this.cityId = cityId;
    }
    @Override
    public void run() {
        try {
            this.appUsedService.doSaveAzTaskAppUsedInfoCity(Integer.valueOf(taskId),cityId);
        } catch (Exception e){
           e.printStackTrace();
        }
    }
}

新建了一个线程,然后再主线程中去实例化本线程,启动线程。DUG问题是,线程启动后,参数也都传过来了,但是通过注解来注入的service一直是null值。

老办法,翻了度娘的牌子,找到问题,在线程中为了线程安全,是防注入。没办法,要用到这个类啊。只能从bean工厂里拿个实例了

public class AllBean implements ApplicationContextAware{

    private static ApplicationContext applicationContext; 

    public void setApplicationContext(ApplicationContext context) {
       AllBean.applicationContext = context;
       }

    public static Object getBean(String name){
         return applicationContext.getBean(name);
    }

     public static ApplicationContext getApplicationContext() {
          return applicationContext;
      }
}

getbean方法,获取上下文中的bean, 不过呢要有点问题,这个AllBean类需要在在Bean工厂中注册下

<bean id="allBean" class="xxxxx.AllBean"  />

想要啥东西,现在都可以直接去getBean,例如:

AppUsedService appUsedService = (AppUsedService) AllBean.getBean("appUsedService");

好的,线程正常启动了。

原文地址:https://www.cnblogs.com/nankeyimengningchenlun/p/9186207.html

时间: 2024-11-06 18:29:10

线程中调用service方法出错的相关文章

springMVC在普通方法中调用service方法

SpringContextUtil类 package com.common.util; import org.springframework.beans.BeansException;import org.springframework.beans.factory.NoSuchBeanDefinitionException;import org.springframework.context.ApplicationContext;import org.springframework.contex

模拟做饭系统(java+线程中的join方法)

(一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+(没有调用jion方法) (二)有线程控制(妈妈进程和儿子进程又先后影响)+(调用jion方法) 项目的结构图: (二)没有进程控制mintak Son.java主要是模拟儿子的行动,儿子买酱油的行动(与有进程控制的源程序相同) 代码如下: public class Son implements R

为什么说invalidate()不能直接在线程中调用

1.为什么说invalidate()不能直接在线程中调用?2.它是怎么违背单线程的?3.Android ui为什么说不是线程安全的?4.android ui操作为什么一定要在UI线程中执行? 1.为什么说invalidate()不能直接在线程中调用?答:    Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在非UI主线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用.例如:在非UI线程中调用

Struts2中使用execAndWait后,在 Action中调用getXXX()方法报告java.lang.NullPointerException异常的原因和解决方法

使用 Struts2 编写页面,遇到一个要长时间运行的接口,因此增加了一个execAndWait ,结果在 Action 中调用 getContext()的时候报告异常 1 ActionContext context = ActionContext.getContext(); 2 ServletContext servletContext = (ServletContext) context.get(ServletActionContext.SERVLET_CONTEXT); //抛空指针异常

Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)

当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.lang.NullPointerException) 按上述步骤解决完自己的工具类后,你会发现项目运行后仍然报空指针此时你需要在applicationContext.xml 配置文件中添加一行配置文件 如图: 对自己工具类所在的包进行注解扫描,使Spring能够识别自己上面所配置的注解 原文地址:htt

为何invalidate()不可以直接在UI线程中调用

1.android ui操作为什么一定要在主线程中执行? 答:Android UI操作是单线程模型,关于UI更新的相关API(包括invalidate())都是按照单线程设计的,对于多线程运行时不安全的,即在非主线程调invalidate()刷新界面出现异常.所以android禁止在非主线程更新UI. 2.为什么说invalidate()是线程不安全的?答:在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面

在 Flash ActionScript 2.0 中调用 Javascript 方法

本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript 2.0 中调用 Javascript 方法 最近在工作中,有个这样的需求: 要从 Flash ActionScript 2.0 中调用网页上的 Javascript 方法 这是一个关于 Flash 和 Javascript 交互的问题. 在 ActionScript 2.0 中调用外部 javasc

线程中调用Updatedata的问题

随便发个自定义消息,然后在 CMyDialog的自定义消息处理函数中 UpdateDate().因为 UpdateDate用到了线程本地存储.不能跨线程的 UpdateData只能在主线程中使用,将UpdateData放到你的WM_MY_MESSAGE消息处理函数里面就可以了. 工作线程不能更新主线程的控件.改为在工作线程给主线程发消息,然后由主线程受到消息后,Updatedata 线程中调用Updatedata的问题,布布扣,bubuko.com

C#中跨线程的调用的方法--this.invoke

private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(display)); thread.Start(); } private void display() { while (true) { Thread.Sleep(100); this.Invoke(new threadcall(SetText2)); } } int count = 0; publ