spring boot @Autowired 为null 处理

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);
相关推荐
VisuperviReborn1 分钟前
React Native 与 iOS 原生通信:从理论到实践
前端·react native·前端框架
刘个Java2 分钟前
对接大疆上云api---实现直播效果
java
用户9545156811624 分钟前
== 和 equals 区别及使用方法组件封装方法
java
hashiqimiya8 分钟前
html的input的required
java·前端·html
Mapmost23 分钟前
WebGL三维模型标准(二)模型加载常见问题解决方案
前端
一只叫煤球的猫23 分钟前
从1996到2025——细说Java锁的30年进化史
java·后端·性能优化
Mapmost24 分钟前
Web端三维模型标准(一):单位与比例、多边形优化
前端
努力努力再努力wz25 分钟前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis
极客柒28 分钟前
Unity 协程GC优化记录
java·unity·游戏引擎
我要去腾讯29 分钟前
Springcloud核心组件之Sentinel详解
java·spring cloud·sentinel