首页 > 编程语言 > 详细

Spring 在多线程中,bean的注入问题

时间:2019-06-02 16:49:01      阅读:70      评论:0      收藏:0      [点我收藏+]

Spring 在多线程中,bean的注入问题

最近碰到了一个问题,使用SSM框架,在Service层需要另开一个线程,这个线程专门用来做一些操作,并将结果写入数据库中。但是在线程中使用@Resource或者@Autowired注入全部为NULL,
原来是Spring不能在线程中注入。

网上的主要解决方法有:

将需要的Bean作为线程的的构造函数的参数传入
使用ApplicationContext.getBean方法来静态的获取Bean

我的线程中所需要的Bean的数量较多,并且以后还有可能增加或者减少,所以方法1并不适合
我的Spring配置文件并不只一个,而且使用getBean方法需要重新加载一遍所有的Bean,这样也违反的Spring的IoC,并不是我想要的,所以也不采用方法2

最后确定使用内部类的方法,将线程中需要的Bean提前注入好,大致的结构如下:

@Service
class TestExample{

//这两个为线程所需要的Bean
@Resource
TestDao testDao;

@Resource
NeedDap needDao;

public void serviceExecute(){
    //在这里开启线程,执行操作
    ThreadExample te = new ThreadExample();
    te.start();
}

//内部类
private class ThreadExample extends Thread{

    public ThreadExample(){
        //也可以在构造函数中传入参数
    }
    public void run(){
        //这里为线程的操作
        //就可以使用注入之后Bean了

    }
}

}

Spring 在多线程中,bean的注入问题

原文:https://www.cnblogs.com/mumian2/p/10963317.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!