spring web项目在启动的时候,就会完成各种组件的注入。在工作的过程中,遇到了这样一个问题:

一个serviceA中要新开一个线程来执行一项任务(假定这个任务是ClassA)。ClassA中要用到其他serviceB,serviceC的一些功能。所以在ClassA中声明了要用的serviceB serviceC变量。

一开始采用了简单的@Autowired注解来进行注入。但是在用junit测试的时候报错,service变量为null。

上网查询后了解到,由于这个ClassA是我们 new Thread(new ClassA()).start()    创建的。里面是没有办法进行注入的,不被spring容器管理。所以有以下几个方法:

1.在ClassA中获得ApplicationContext 然后调用getbean方法来获得需要的service bean(此方法需要实现ApplicationContextAwareness 接口。实现获得ApplicationContext对象)

2.通过构造函数注入。也就是new ClassA(service1,service2) 这样将serviceA中注入的服务传入。

3.通过setter注入,也就是  new ClassA().setService1(service1)  ,实际和2没什么区别。

目前看到的主要是这几种方法。

个人的感觉是,实现功能才是最重要的,不能为了看起来漂亮强行用注入(因为注入实现不了,当然也可能是因为知识缺乏)。需要的时候,使用构造函数也是可以的。

由于工作经验比较少,这种多线程中调用外部service的方法也可能是代码的结构设计时考虑的不够周全才造成了现在的情况。如果之后有了新的想法,随时来修改

spring 另开线程时的注入问题的更多相关文章

  1. 160309、Spring AOP操作action时无法注入,报空指针错误

    今天帮同事看个问题,action注入失败,代码没问题,主要是stuts2权限移交的问题,特此记录一下 Spring AOP操作action时无法注入,报NullPointer异常 当使用Spring ...

  2. Spring AOP操作action时无法注入,报NullPointer异常

    Spring AOP操作action时无法注入,报NullPointer异常当使用Spring AOP对action层进行操作时,会出现注入失败的问题,出现空指针异常.原因是一般struts2+spr ...

  3. spring中使用quartz时注入时出现的错误

    错误1: 配置文件: <!-- 任务执行器的线程池 --> <bean id="taskExecutor" class="org.springframe ...

  4. Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题

    现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...

  5. Spring与Struts2整合时action自动注入的问题

    当Struts和Spring框架进行整合时,原本由action实例化对象的过程移交给spring来做(这个过程依赖一个叫struts2-spring-plugin的jar包,这个包主要的功能就是实现刚 ...

  6. Spring中的线程池和定时任务功能

    1.功能介绍 Spring框架提供了线程池和定时任务执行的抽象接口:TaskExecutor和TaskScheduler来支持异步执行任务和定时执行任务功能.同时使用框架自己定义的抽象接口来屏蔽掉底层 ...

  7. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  8. Spring IoC是如何进行依赖注入的

    依赖注入(DI) DI(Dependency Injection),Spring IoC 不是一种技术,而是一种思想,通过这种思想,能够指导我们设计出松耦合的程序代码.而Spring IoC这个思想的 ...

  9. Spring单例模式与线程安全

    问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存 ...

随机推荐

  1. char 型二维数组

    char FutureFunc[][16] = {"XMA","ZIG","PEAK","PEAKBARS"," ...

  2. 浅析session&cookie

    session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...

  3. ORACLE常用SQL(session&badSql)

    查看session:select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.loc ...

  4. [Unity3D]Unity资料大全免费分享

     都是网上找的连七八糟的资料了,整理好分享的,有学习资料,视频,源码,插件……等等 东西比较多,不是所有的都是你需要的,可以按  ctrl+F 来搜索你要的东西,如果有广告,不用理会,关掉就可以了,如 ...

  5. 转换一个矩阵(2维数组)为HTML Table

    matrix[row][col],比如[ [ "Name", "Age" ], [ "Sam", 12 ] ] function (m) { ...

  6. Centos中文乱码的解决方法

    1)说明: Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK. 2)查看支持 ...

  7. TextSwitcher 简单用例

    TextSwitcher 字面理解是文字交换器,是ViewSwitcher的子类,从ViewSwitcher来看,是View交换器,TextSwitcher继承自ViewSwitcher,显然是交换T ...

  8. offset图

  9. [自动运维]oracle自动备份

    数据是应用的核心部分,程序坏了换台机器重新发布就可以,但数据一旦丢失,造成的损失将不可挽回,程序发布到生产后,数据的备份便显得尤为重要,由于不一定所有的服务均有资金完成高级的备份如RAC和DG,在我们 ...

  10. Ext3文件系统及JDB介绍

    Ext3介绍 对于ext3文件系统,磁盘空间划分一系列block groups,每个group有位图来跟踪inode和data块的分配和范围.其物理布局如下: Superblock:位于group内第 ...