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);
相关推荐
电商API大数据接口开发Cris12 分钟前
Java Spring Boot 集成淘宝 SDK:实现稳定可靠的商品信息查询服务
前端·数据挖掘·api
pepedd86414 分钟前
LangChain:大模型开发框架的全方位解析与实践
前端·llm·trae
HANK20 分钟前
KLineChart 绘制教程
前端·vue.js
David爱编程27 分钟前
为什么线程不是越多越好?一文讲透上下文切换成本
java·后端
Jerry31 分钟前
Compose 利用工具加快开发速度
前端
A尘埃37 分钟前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
前端小张同学42 分钟前
前端行情好起来了,但是我依然没拿到offer
前端
csxin43 分钟前
Spring Boot 中如何设置 serializer 的 TimeZone
java·后端
程序员小续1 小时前
React 官方严令禁止:Hook 不能写在 if/else,真相竟然是…
前端·javascript·程序员
懒得不想起名字1 小时前
flutter_riverpod: ^2.6.1 应用笔记
前端