问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

spring在多线程中怎么注入bean

发布网友 发布时间:2022-04-21 01:06

我来回答

1个回答

热心网友 时间:2022-06-17 00:19

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

问题说明
今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被注入,bean对象的值为null。
原因分析
web容器在启动应用时,并没有提前将线程中的bean注入(在线程启动前,web容易也是无法感知的)
解决方案
方法有多种,网上也看到了不少。
1. 使用static声明变量
http://blog.csdn.net/bjamosgavin/article/details/6125497
这个方法自己试了一下但是没有成功。。。
2. 把线程设置为主程序的内部类
这也是一种简单的方法,主程序在web容器加载时肯定是可以注入Spring bean的,那么将线程的实现类放在主程序的类中便可以“共享”Spring的bean,(当然,这需要提前把线程中的需要用到的bean定义在外层的类中)。
具体操作方法,就是将生成线程的线程池定义在主程序的类中,每个线程的实现类作为内部类也定义在主程序中。这个方法自己试过,是可以的。
3. 使用静态方法直接取的容器中的spring对象
这个方法稍微专业点,可以线程的分发与线程的实现分离出来。在每个线程中使用静态方法直接取的容器中的spring对象。
使用静态方法获取容器中的spring对象可以参见
http://littie1987.iteye.com/blog/937877,
或者http://my.oschina.net/skyline520/blog/181158?p={{page}}
但一定要记住,你定义这个工具类也要配置成spring中的bean!
下面贴一下我在使用时的代码
(1)定义工具类
public class SpringApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
SpringApplicationContextHolder.context = context;
}

public static Object getSpringBean(String beanName) {
notEmpty(beanName, "bean name is required");
return context==null?null:context.getBean(beanName);
}
public static String[] getBeanDefinitionNames() {
return context.getBeanDefinitionNames();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
绿茶要猛冲吗,绿茶鲜嫩不需要(绿茶冲泡的正确方式) 绿茶为什么越好越不耐泡 绿茶要泡几泡?哪种绿茶最耐泡? 哪种绿茶最耐泡 职场故事:美女职员遇到暴躁老板 老板脾气坏得要命,我该怎么办 老板老爱发脾气,我们应该怎么做呀? 害怕老总发脾气怎么办 网络上用名字测和另一个人的关系准确吗 一个男生把自己的名字和另一个人的名字放在一起,中间放个"&"符号... 如何调用spring配置文件手动注入的bean spring的bean注入属性有哪几种方式 spring 普通类 怎么注入bean spring注入bean的几种方式 word表格文字上下居中怎么弄 word中的表格文字怎么上下居中 word表格里文字如何上下居中 word表格上下居中怎么弄 word表格文字上下居中怎么设置 如何使word表格中的文字上下居中 word表格怎样让文字上下居中 如何让word表格中的文字上下居中 word表格里的字怎么上下居中 word里的表格怎么调整文字上下居中 在word表格中怎么让文字上下居中 怎么把word表格中的文字上下居中 word表格怎么让字体上下居中 word表格怎么调整文字上下居中 如何成为一个很厉害的人 读书笔记 如何成为一个很厉害的人读后感 spring 如何用注解的方式给普通类注入bean spring 用哪种方式注入bean好 spring中哪些类需要作为bean来进行注入管理 急急急:Java普通工具类获取Spring中注入bean时偶尔发生异常 采用spring注解后如何注入bean问题 如何查看 spring注入的bean 如何用spring获取bean 如何取得Spring管理的bean spring 中怎么取得bean 如何通过spring的配置文件得到bean对象 spring配置bean实例化有哪些方式 关于Spring注入,静态工具类怎么注入属性 谁知道Spring获取Bean的几种方式 红外测距仪有什么特点? 测距仪主要是通过什么实现的? 苹果手机里的号码怎么导入安卓手机 怎么从苹果手机导出电话号码到安卓手机 怎么将苹果手机里的电话号码导入安卓手机 苹果手机如何导入电话号码 苹果手机电话号码怎么弄到安装手机上