spring boot 开发中,经常用到 @Autowired 注入某些服务,但有时发现注入的服务为null。原因很简单,因为服务生成是有先后顺序的。当要注入的服务还没有生成时,自然为null。
解决的方法:通过getBean 手工获取服务。
1、定义 保存所有bean 的类:
java
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、在服务运行的入口处:
java
public static void main(String[] args) {
ApplicationContextUtil.context = SpringApplication.run(WsApplication.class, args);
}
3、检测到服务为null 时, 手工获取
java
@Autowired
private MessageHandle messageHandle;
if(messageHandle==null) messageHandle = ApplicationContextUtil.context.getBean(MessageHandle.class);