zoukankan      html  css  js  c++  java
  • Spring 在多线程中,bean的注入问题

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

    网上的主要解决方法有:

    1. 将需要的Bean作为线程的的构造函数的参数传入
    2. 使用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了
    
            }
        }
    }
    
  • 相关阅读:
    UVA 12546 LCM Pair Sum
    两两间的距离都是整数的点集
    Codeforces 11.27
    Codeforces 11.27 B
    UVA 105
    打印自身的程序
    Interval DP
    Tree DP
    参加第五次全国工程建设行业信息化建设高峰论坛 (个人的一点感想)
    基础资料分类及清单版本管理
  • 原文地址:https://www.cnblogs.com/bencakes/p/6139542.html
Copyright © 2011-2022 走看看