线程中@Autowired无法注入@service的问题浅谈

今天遇到了一个在线程中自动注入service的问题,service始终都是空的,看了些前辈的解决方法

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;

/**
 * spring上下文获取springbean
 */
public class SpringBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext = null;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringBeanUtil.applicationContext = applicationContext;
    }
    public static Object getBeanByName(String beanName){
        if(applicationContext == null){
            return null;
        }
        return applicationContext.getBean(beanName);
    }
    public static <T> T getBean(Class<T> type) {
        return applicationContext.getBean(type);
    }
}

 通过spring的上下文去手动获取service,在线程启动时得到bean

 public ServerSocketThread(Socket socket){
        this.socket = socket;
        this.monitorDataService = SpringBeanUtil.getBean(MonitorDataService.class);
        this.monitorPointService = SpringBeanUtil.getBean(MonitorPointService.class);
    }

嗯,理应没毛病了,但是。。。获取到的依然是null,找啊找,找啊找,终于,让我找到了问题的根源,

applicationContext上下文都是null,这怎么能获取到bean呢?

在springboot启动的时候,我开启了线程,获取service,但是此时上下文还没有加载完成,所以获取到的都是null,

这应该怎么办呢,突然想到了一个注解@Configuration,此处应该标红,以示表彰,哈哈。它可以使该类优先加载,

在SpringBeanUtil 工具类的头上加上@Configuration注解,问题解决了

 

本人郑重声明,问题为本人亲身所遇,绝无虚言,欢迎各位大佬指正。

 


版权声明:本文为m746318539原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。