多线程时Autowired自动注入问题_多线程使用@autowired-程序员宅基地

技术标签: java  

在多线程时使用@Autowired总是获取不到bean,原因是:new thread不在spring容器中,也就无法获得spring中的bean对象。

解决方法:手动获取

package com.test.configs;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class BeanContext implements ApplicationContextAware {

	private static ApplicationContext applicationContext;
	
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		BeanContext.applicationContext = applicationContext;
	}
	
	public static ApplicationContext getApplicationContext(){
		return applicationContext;
	}
	
	@SuppressWarnings("unchecked")
	public static <T> T getBean(String name) throws BeansException {
		return (T)applicationContext.getBean(name);
	}
	
	public static <T> T getBean(Class<T> clz) throws BeansException {
	    return (T)applicationContext.getBean(clz);
	}
}

创建thread


package com.test.handler;

import com.test.configs.BeanContext;
import com.test.service.TestService;
import com.test.model.User;

/**
 * created by huguoju on 2017/11/13.
 */
public class TestHandler implements Runnable {

    private User user;
    private TestService testService;
    @Override
    public void run() {
        this.testService= BeanContext.getApplicationContext().getBean(TestService.class);
        User user=testService.queryUserById(11);
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}




在其他service里调用

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("upFinancial-pool-%d").build();
            ExecutorService pool = new ThreadPoolExecutor(corePoolSize, maxPoolSize,
                    6000L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingDeque<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
            UpFinancialContractHandler handler=new UpFinancialContractHandler();
            handler.setUser(user);
            pool.execute(handler);





版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011493599/article/details/78522315

智能推荐

html 更改元素坐标,利用JS修改元素的位置属性,为什么style.left可行而style.top失效?...-程序员宅基地

文章浏览阅读554次。Q.想利用JS中的move函数实现小图的斜线下移,但是明明代码几乎一样,left的移动可以实现,top却怎么也动不了台球桌*{padding:0;margin:0;}div{background:url(../PICTURE/table.JPG) no-repeat;height:260px;width:465px;}#ball{}function init(){var timer = setIn..._js函数设置元素的top left值后没有发生位置变化

Android开发 第三方免费UI组件-程序员宅基地

文章浏览阅读94次。2019独角兽企业重金招聘Python工程师标准>>> ..._安卓第三方ui组件

c语言课后题第四章函数fun,计算机二级C语言强化习题题及答案2017-程序员宅基地

文章浏览阅读1.6k次。计算机二级C语言强化习题题及答案2017练习做多了自然会形成自己的做题方法和速度,为此,今天百分网小编为大家整理了以下2017计算机二级C语言强化习题题及答案,希望对你的学习有帮助!强化习题题一1: 第1题第请编写函数fun,该函数的功能使:统计各年龄段的人数。N个年龄**调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[..._c语言题目:请编写函数fun,该函数的功能是:统计各年龄段的人年龄

华为OS操作系统,最早今秋面世!_2001年华为操作系统-程序员宅基地

文章浏览阅读541次。由于谷歌对华为的封锁,终止了与华为的业务往来。华为将会在年内或者明年,推出自家的操作系统“华为OS打通了手机、电脑、平板、电视、可穿戴设备,统一成一个操作系统,并且兼容所有的安卓应用和web应用”,华为OS有望成为下一个IOS吗?下文具体说一说。华为“鸿蒙”操作系统目前,网上可查的华为操作系统是前几天爆出的一张PPT,显示了华为早在2012年就开始布局自家的操作系统,始终保持了低调的姿..._2001年华为操作系统

让Openwrt 默认开启wifi_openwrt默认开启wifi教程-程序员宅基地

文章浏览阅读1.6w次。源码中位置看起来是在一个mac80211的包里面openwrt/trunk/package/mac80211/files/lib/wifi/mac80211.sh修改关闭wifi,修改热点名实践上更改上面的内容之后并没有让wifi开启,根本原因是不同的平台这个位置是不一定的(参考https://downloads.openwrt.org/kamikaze_openwrt默认开启wifi教程

ASP.NET Core 2.2 基础知识(七) 选项模式-程序员宅基地

文章浏览阅读102次。原文:ASP.NET Core 2.2 基础知识(七) 选项模式承接上一篇 配置,选项模式是专门用类来表示相关配置的服务.基本选项配置新建一个选项类,该类必须是包含无参数的构造函数的非抽象类. public class MyOptions { public MyOptions() { Id = 1;..._.net core 设计点击按钮显示两个选项

随便推点

域名删除时间常识-程序员宅基地

文章浏览阅读174次。很多站长为了寻觅一个满意的域名费尽心思,特别是发现自己想要的域名快要过期时,不知道什么时间可以再注册。下面分享域名到期后多长时间可以再注册机如何查询域名过期时间的方法和技巧。步骤/方法一、国际域名过期65–75天后ICANN会删除,删除之后可以立即注册。  国际域名COM NET ORG大约域名从到期到删除的时间为:30+30+5=65天,精确的删除时间网上也是众说不一,有时是75天,...

《ASP.NET AJAX程序设计——第II卷:客户端Microsoft AJAX Library相关》前言-程序员宅基地

文章浏览阅读76次。章节列表:http://www.cnblogs.com/dflying/archive/2007/05/18/751741.html 在最近的一年以及今后的三五年内,我们有理由相信Web应用程序将受到更多开发者和用户的青睐。作为领路人Google的一系列基于Web的产品完全地颠覆了传统的网页概念,让用户甚至不敢相信基于浏览器的程序竟能实现如此强大的功能。浏览器这座宝库在沉睡多年之后终于被一...

JavaScript精编干货-程序员宅基地

文章浏览阅读251次。浅析用 js 解析 xml 的方法由于项目上需要解析 xml,于是各种百度,然后自己总结了下各个主流浏览器解析 xml 的方法,只能是很浅显的知道他的用法,但是还没有深层次的研究。装 X - 建立自己的斗图网站库之前加过一个斗图群,看到很多经典的表情,然后就收藏到了 QQ, 迫于本屌丝开不起某 Q 会员,就只能收藏到本地,无法在其他..._javascript精编语言

2019 面试实战 - 第二回合-程序员宅基地

文章浏览阅读411次。Create by jsliang on 2019-3-7 22:26:08Recently revised in 2019-3-10 18:28:53Hello 小伙伴们,如果觉得本文还不错,记得给 jsliang 的文档库点个 star , 你们的 star 是我学习折腾的动力!GitHub 地址并不是只有特定的季节才能跑路,只因为人跑得多了,这条路就定下来了。金三银四跑路季,js..._cata测评 开发岗位

某型机电综合管理计算机便携自动测试系统ETest的设计与实现_机电管理计算机-程序员宅基地

文章浏览阅读78次。设备组成Etest_CPS系统主要由硬件部分与软件部分组成。硬件部分由PCI机箱、PCI控制器以及各种PCI接口板卡组成。软件部分由测试设计软件模块、测试执行服务软件模块、测试执行客户端软件模块、设备资源管理软件模块等主要软件模块以及曲线数据生成、CRC插件生成与诊断、测试数据记录与查看、应用协议生成工具、应用协议模板管理、测试报告生成等系列工具组成。各模块主要功能(1)硬件部分Etest硬件部分采用标准的机柜形式,主机采用PCI工业控制计算机,各类接口板块采用PCI总线的接口板卡。主要硬件部分的指_机电管理计算机

培养你的品格-程序员宅基地

文章浏览阅读121次。A:选出你想具有的人格,然后进行自我暗示。想象自己已经具备了这些优秀的品质。然后对自己讲:我已经是这样一个人了。那么不久你会发现自己身上出了你所羡慕的美德。B:用自制力控制住自己,每天多次提醒自己,并抓住每个表现的机会,把它展现出来。C:找到一些人,发现他们的长处并赞美他们,但切记不要虚伪、奉承,而是真诚热情的,这将证你养成发现别人美德的习惯,从而你将获得自尊及来自他人的感激。“吸引法则”..._培养和谐的个性和自尊的品格 博客