今天遇到了一个在线程中自动注入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注解,问题解决了
本人郑重声明,问题为本人亲身所遇,绝无虚言,欢迎各位大佬指正。