Spring在多线程下@Resource注入为null的问题
作者:Healist 发布时间:2022-09-11 07:41:18
多线程下@Resource注入为null
前情叙述
记录以下这个坑,我的情况大致是这样的,我在用webmagic写爬虫,在类中通过@Resoource(@Autowired也一样)注入dao接口实例。
然后我在process方法中引用这个实例发现这个实例在这里一直为null,然后我在测试类或者当前类的main函数中引用dao实例就没问题,一切正常(当时 黑人问号脸???)
几经波折,发现原因是spring和多线程安全的问题,不让注入。因为我也没研究过webmagic源码,不过我个人觉得跟webmagic没有与spring容器相关联可能很有关系,
解决方案
我用的是很简单暴力的方法,spring不让自动注入,那就手动注入呗,在process方法中通过ApplicationContext获取对应那个dao bean实例,然后可以了。
附上其它解决
就是我用@service或者@resposity声明了一个bean,给sping管理。现在我有个需求,就是用到Thread,但是这个线程需要用我的service或者dao,然后我习惯性的在继承了Thread类或者实现了Runnable的类里写了如下:
@Resource
private MyService myService;
但是运行的时候,进入到这个线程,这个myServcie总为null,也就是注入失败。
1.查了一下,有这样的问题,原因就是spring和多线程安全的问题,不让注入
网上的解决方案说,声明时弄成static的。如下:
private static CustomerchangeService customerchangeService;
public CustomerchangeService getCustomerchangeService() { return customerchangeService; }
public void setCustomerchangeService( CustomerchangeService customerchangeService) { CustomerchangeThread.customerchangeService = customerchangeService; }
不过我这样行不通。
2.第二种(可以)
就是我在启动这个线程的时候,在这个线程的构造函数中把我的service实例传过去,然后再启动。
new MyThread(myService).start()
3.第三种(可以)
就是让我的service或者dao的实现类实现Runnable这个接口,然后把你的线程的逻辑写在run方法里,启动的时候,直接this.start()就行。注意除了要在service的实现类中实现Runnable接口外,还应该在service接口中继承Runnable接口。
对于我的情况,我是直接在dao里实现了Runnable,然后用的线程池启动的,如下:pool.execute(this);
4.还有就是直接new一个实例。
不知道还有什么解决的好办法。
来源:https://blog.csdn.net/Healist/article/details/54791195
猜你喜欢
- 效果图在开发APP中,经常要实现圆形头像,那么该如何实现呢?要裁剪吗,要重写draw函数吗?不用,只用一行代码就可以实现Glide实现圆形图
- 有时候有一些DOS命令需要我们在执行程序的时候调用,这需要使用C#提供的相关接口。代码如下,很简单,相信大家都能看懂,我就不赘述了。usin
- 本文实例为大家分享了java抓取邮箱号码的具体代码,供大家参考,具体内容如下java抓取文件中邮箱号码的具体代码package reg;im
- startActivityForResult与startActivity的不同之处在于:1、startActivity( )仅仅是跳转到目标
- 1、@Valid与@Validated的区别1.1 基本区别@Valid:Hibernate validation校验机制@Validate
- 前言:理论和代码必须结合起来才能真正的掌握一、this概念:this代表着当前对象的引用,也是当前函数所属对象的引用。直白的说,哪个对象调用
- 本文实例为大家分享了C#绘制饼状图和柱状图的具体代码,供大家参考,具体内容如下#代码如下:using System;using System
- 1. 文件上传a. 看看@FIEL注解的属性/** * 上传文件时使用该注解 设置文件相关参数 */@Retention(Retention
- 一、概述有序数组中常常用到二分查找,能提高查找的速度。今天,我们用顺序查找和二分查找实现数组的增删改查。二、有序数组的优缺点优点:查找速度比
- monitor概念管程,监视器。在操作系统中,存在着semaphore和mutex,即信号量和互斥量,使用基本的mutex进行开发时,需要小
- Spring AOP proxyTargetClass的行为要点列表形式proxyTargetClasstrue目标对象实现了接口 – 使用
- 1、添加依赖<dependency> <groupId>org.springframewo
- java常量池技术java中常量池技术说的通俗点就是java级别的缓存技术,方便快捷的创建一个对象。当需要一个对象时,从池中去获取(如果池中
- XSS是一种经常出现在web应用中的计算机安全漏洞,具体信息请自行Google。本文只分享在Spring Cloud Gateway中执行通
- 一、项目概述本系统采用MVC架构设计,SQLite数据表有用户表、成员表和活动表,有十多个Activity页面。打开应用,进入欢迎界面,3s
- 一、类加载流程类加载的流程可以简单分为三步:加载连接初始化而其中的连接又可以细分为三步:验证准备解析下面会分别对各个流程进行介绍。1.1 类
- 我贴c#的代码: namespace IWebs.Webs{ using System; using System.Web.Services
- 方法如下:声明一个事件: Num_DiscountAmount.MouseWheel +=n
- 1. 数据构造索引2个文档到 hotel 索引中:PUT /hotel/_doc/1{ "title": &
- 传播行为定义关于客户端和被调用方法的事务边界。Spring定义了7种截然不同的传播行为。1,PROPAGATION_MANDATORY,表示