线程中@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注解,问题解决了

 

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

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值