`
菜鸟级JAVA
  • 浏览: 96163 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Thread里面使用@resource失败,对象为null

阅读更多
spring 在Thread中注入@Resource失败,总为null~解决
背景:
       就是我用@service或者@resposity声明了一个bean,给sping管理。现在我有个需求,就是用到Thread,但是这个线程需要用我的service或者dao,然后我习惯性的在继承了Thread类或者实现了Runnable的类里写了如下:
   @Resource
private MyService myService;
但是运行的时候,进入到这个线程,这个myServcie总为null,也就是注入失败。

1.查了一下,有这样的问题,原因就是spring和多线程安全的问题,不让注入,网上的解决方案说,声明时弄成static的。如下:http://blog.csdn.net/bjamosgavin/article/details/6125497

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一个实例。
不知道还有什么解决的好办法。

本文转自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046843d4709dc363fd6db027fa3c316ce314c413065e7ba302267558e9a61375ff21c41abb665346c523db799cd884bd7b8902a2f8a2432741d844211d51eaece4127c53d841fb4ef4fe8fcaa72c4fd84c4de2444cc51127bf0b0dc1b5d538a3ea7033192fade164b&p=9733e716d9c109ff57ed97784a4798&newp=996edc1b8c904ead1bbd9b7e0e108c231610db2151d4d7133c&user=baidu&fm=sc&query=Thread%40resource+null&qid=83cb35b0000242f8&p1=1
因为该页面载入出错,我就从百度快照里把原文复制过来了,感谢作者!
分享到:
评论

相关推荐

    详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    在这个工具类中,我们可以使用 ApplicationContextAware 接口来获取当前的应用上下文环境,然后使用这个上下文环境来获取 bean 对象。 代码实现: ```java @Component public class SpringContextUtil implements ...

    java线程Thread的实例

    本实例将深入探讨`Thread`类的使用,这对于初学者掌握多线程编程至关重要。 在Java中,创建线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。当一个类直接继承`Thread`类时,可以直接重写其`run()`方法来...

    Java 11道中级面试题.docx

    - `@Component`:它是Spring中用于标记一个类为Spring管理的Bean的基本注解,但通常我们会使用更具体的如`@Service`, `@Controller`, 或`@Repository`来代替,它们分别对应业务逻辑层、控制层和数据访问层。...

    C多线程程序实现

    hThread = CreateThread(NULL, 0, ThreadFunction, NULL, 0, &threadId); // 确保线程不是主线程 if (hThread != NULL) { // 等待线程结束 WaitForSingleObject(hThread, INFINITE); // 关闭线程句柄 ...

    Mutex 互斥量使用实例

    互斥量(Mutex)是Windows操作系统中的一个同步对象,用于控制多个线程对共享资源的访问,确保在任何时刻只有一个线程能访问该资源。在多线程编程中,互斥量是保证数据一致性、避免数据竞争的重要工具。本实例将深入...

    嵌入式实习-day5-线程

    pthread_create(&producer_thread, NULL, producer, NULL); pthread_create(&consumer_thread, NULL, consumer, NULL); pthread_join(producer_thread, NULL); pthread_join(consumer_thread, NULL); sem_...

    Java 读取资源文件

    - `Class.getResource(String path)`方法返回一个`URL`对象,表示相对于当前类的类路径上的资源的位置。例如,如果你有一个名为`config.properties`的配置文件,你可以这样获取它的URL: ```java URL resource = ...

    IOUtils组件,搭配本文项目专用

    这段代码首先通过`Thread.currentThread().getContextClassLoader().getResource()`或`getResourceAsStream()`方法找到类路径下的资源,然后使用IOUtils的`toString()`方法将输入流转换为字符串,这样就能方便地读取...

    无名信号量示例代码

    printf("Thread: Accessing resource, value: %d\n", shared_resource++); sem_post(&sem); // 释放信号量,增加信号量的值 } } int main() { sem_init(&sem, 0, 1); pthread_t tid1, tid2; pthread_create...

    解析简单xml文件的类图设计1

    在解析XML文件时,首先我们需要创建`DocumentBuilderFactory`实例,然后使用该工厂创建`DocumentBuilder`,接着通过`DocumentBuilder`解析XML文件得到`Document`对象。以下是一个基本的示例: ```java ...

    JAVA读取同一路径下所有类及其方法

    这个方法使用 `ClassLoader` 来获取当前类的资源 URL,然后将其转换为文件对象,以便遍历该文件夹下的所有类。 类的遍历 在 `getClasses` 方法中,我们使用递归遍历文件夹下的所有类。遍历的过程中,我们使用 `...

    linux下C语言多线程编程实例

    pthread_create(&worker_thread, NULL, worker, NULL); pthread_mutex_lock(&mutex); ready = 1; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); // 等待一段时间后再停止工作 sleep(2); ...

Global site tag (gtag.js) - Google Analytics