本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
spring boot 开发中,经常用到 @Autowired 注入某些服务,但有时发现注入的服务为 null。原因很简单,因为服务生成是有先后顺序的。当要注入的服务还没有生成时,自然为 null。
解决的方法:通过 getBean 手工获取服务。
1、定义 保存所有 bean 的类:
import org.springframework.context.ConfigurableApplicationContext;
public class ApplicationContextUtil {
public static ConfigurableApplicationContext context;
public static Object getBean(String name){
if(null == context) return null;
return context.getBean(name);
}
}
2、在服务运行的入口处:
public static void main(String[] args) {
ApplicationContextUtil.context = SpringApplication.run(WsApplication.class, args);
}
3、检测到服务为 null 时, 手工获取
@Autowired
private MessageHandle messageHandle;
if(messageHandle==null) messageHandle = ApplicationContextUtil.context.getBean(MessageHandle.class);