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);
相关推荐
小坏讲微服务3 分钟前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
chxii13 分钟前
第六章:MySQL DQL 表之间的关系 自连接 一对一、一对多、多对一、多对多
java·前端·mysql
U***498320 分钟前
前端性能优化插件,图片压缩与WebP转换
前端
c***V32328 分钟前
前端构建工具发展,esbuild与swc性能
前端
u***u68528 分钟前
前端构建工具多环境配置,开发与生产
前端
U***e6329 分钟前
前端构建工具迁移,Webpack到Vite
前端·webpack·node.js
煎蛋学姐33 分钟前
SSM基于J2EE的山西旅游网站的设计与实现iiqmx(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·java-ee·ssm 框架·山西旅游网站·在线预订系统
百***618744 分钟前
Spring的构造注入
android·java·spring
小白宗轩1 小时前
vsCode的java配置
java·vscode·python
桦说编程1 小时前
如果让我从头再来学习并发编程
java·设计模式·性能优化