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 时, 手工获取
@Autowiredprivate MessageHandle messageHandle;if(messageHandle==null) messageHandle = ApplicationContextUtil.context.getBean(MessageHandle.class);