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);
相关推荐
明月_清风几秒前
浏览器里的 SSD:IndexedDB 极简封装实战
前端·indexeddb
西门吹-禅1 分钟前
【eclipse 升级】
java·ide·eclipse
A懿轩A3 分钟前
【SpringBoot 快速开发】面向后端开发的 HTTP 协议详解:请求报文、响应码与常见设计规范
spring boot·http·设计规范
谢尔登4 分钟前
深入React19任务调度器Scheduler
开发语言·前端·javascript
Seven975 分钟前
剑指offer-78、求平⽅根
java
长城20245 分钟前
HTML5中表单的pattern属性解析
前端·正则表达式·html·html5·pattern·pattern属性·pattern正则表达式
玄〤6 分钟前
个人博客网站搭建day6--Spring Boot自定义RedisTemplate配置:优化序列化与Java8时间类型支持
java·spring boot·redis·后端·spring
知我Deja_Vu7 分钟前
@Transactional 与 @Transactional(rollbackFor = Exception.class) 的区别详解
java·spring
阿珊和她的猫8 分钟前
深入解析如何监听浏览器的页面关闭事件
前端·javascript·vue.js
敲敲千反田8 分钟前
CAS和AQS相关问题
java