spring新线程中注入为空指针的问题
来源:互联网 发布:绯色仕途知秋 编辑:程序博客网 时间:2024/06/09 17:18
最近项目将原来的普通风格做为springMVC风格的时候,因为需要开启一个新的线程进行数据库的处理,所以打算在线程中注入一个service业务处理,因为主线程中可以直接使用@Autowired注解进行注入,但是在新开的线程中就不可以进行注入,每次启动服务器就会报空指针异常,新开启的线程直接就挂掉了,网上也搜了好多,原来是spring不会去管理这个新的线程,所以也就注入不进去任何bean。
然后想怎么才能获取所需的bean呢,注解得方式最终都不能注入。
刚开始看到有人说了几种方式
可以参考这篇博客http://blog.sina.com.cn/s/blog_5a15b7d10102v6ki.html
但试过后,可能不完全能符合我自己的项目,所以都失败了
后来又找到一个ThreadLocal函数,就是解决多线程程序的并发问题的。
他不是一个线程,而是线程的一个本地化对象。ThreadLocal为每个使用该变量的线程分配一个独立的变量副本,每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。
这个类有以下方法:
1.get():返回当前线程拷贝的局部线程变量的值。
2.initialValue():返回当前线程赋予局部线程变量的初始值(protected方法)。
3.remove():移除当前线程赋予局部线程变量的值。
4.set(T value):为当前线程拷贝的局部线程变量设置一个特定的值。
方法没有成功,因为还是bean之间的依赖关系,每一个都注入就没有真正的意义了。
最后就是使用了ApplicationContext来注入,这个的确有效,但防止多次加载配置文件,所以放在静态代码块中,原先程启动也放在了静态代码块中。
主线程开启新线程
<span style="font-size:18px;">static{ CalculateRunnable calculaterRunnable=new CalculateRunnable(); Thread thread= new Thread(calculaterRunnable); thread.start();}</span>新线程注入service bean的方法(声明为static)
<span style="font-size:18px;">private static ApplicationContext ctx=null;private static TransportService transportService;static{ctx = new ClassPathXmlApplicationContext("classpath:/springmvc.xml");transportService = (TransportService) ctx.getBean("transportService");}</span>
这样在线程中需要service的时候就不会报空指针了
总结一点:不要因为spring注解而注解,只是一种方法,还是要以真正的问题看待
0 0
- spring新线程中注入为空指针的问题
- action中的spring注入为空的问题
- Spring注入SessionFactory的空指针异常
- Spring注入SessionFactory的空指针异常
- Spring注入SessionFactory的空指针异常
- spring整合struts@Autowired注入为空指针
- WebService注入为空的问题
- ssh项目中的,由于spring的注入问题引起的空指针错误
- SSI报空指针异常,即spring注入失败问题的解决方式
- Spring使用@Resource、@Autowired注入时出现空指针问题的原因
- Spring使用@Resource、@Autowired注入时出现空指针问题的原因
- spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法
- spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法
- 使用spring的aop实现权限拦截后出现依赖注入为空的问题
- 使用spring的aop实现拦截action后出现依赖注入为空的问题
- spring线程池在新的线程中获取不到注入的实例
- 解决Spring Boot 拦截器注入service为空的问题
- ssh action中service无法注入,报空指针问题
- linux字符设备驱动 cdev
- codeforces 660A
- JDK、Tomcat、ANT及Eclipse常用配置
- linux模块导出符号 EXPORT_SYMBOL_GPL EXPORT_SYMBOL
- Struts2验证框架 图片验证码 自定义验证器
- spring新线程中注入为空指针的问题
- swift nsarray中加nsarray、NSMutableArray
- Linux之Crontab定时任务
- QtCreator:项目中文件按类别放入不同子文件夹
- android studio多渠道打包,且根据buildConfig属性判断为哪个渠道升级或者实现不同业务逻辑
- 珍惜
- 设计模式-抽象工厂模式(abstract factory)
- 快速幂
- 微信朋友圈图片处理策略