IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot用使用@Autowired注入为空问题及工具类封装 -> 正文阅读

[Java知识库]SpringBoot用使用@Autowired注入为空问题及工具类封装

1.问题起因

最近在开发异步导入功能时遇到使用@Autowired进行对象注入,操作对应对象时出现java.lang.NullPointerException异常

空指针异常都是因为调用null对象的方法 , ,就是一个对象还没有没有正常初始化 就先调用它的方法

出现这个问题,当时我就想 是不是最近光顾着回小妹妹信息 注解忘写了 然后我仔仔细细的检查了我异常类的代码,@Component注解我这不是安排得妥妥的!启动扫描路径等 都检查了一遍,没毛病啊 兄弟们!

?随即旁边的实习生给我说:?学长?你注解写错了 这里应该用@Service注解,然后我就具体给他解释了:@Component,@Service,@Controller@Component都是一个通用的Spring容器管理的单例bean组件。而@Repository,?@Service,?@Controller就是针对不同的使用场景所采取的特定功能化的注解组件(也就是有语意化的功能,可以见名知意)。当然还有单例,指定名称等也给他解释了一遍,听得我小兄弟一愣一愣的!(ps:也就暂时能在读大三的小学弟身上找到优越感 哈哈)?

知道这个问题 是因为对象还没有没有正常初始化才导致的 后面就好办了,查出具体问题的位置,原因 改呗 !

2.原因排查

发现问题后,开始以为这个类无法依赖注入是因为是父类为抽象类无法被实例,所以没有被Spring容器管理,但是我实现了抽象类的所有抽象方法,那我的子类就不是抽象类,这不应该啊!??

然后我从导入最开始看逻辑,因为我是通过导入组件上的定义的taskId去数据库中寻找实现类的量路径,然后通过反射去构造类的对象,然后再去执行导入方法,所以我压根不是用的spring容器当中的bean,所以依赖注入的对象也是空的,才会导致NullPointerException异常!!

?

3.工具类开发?

知道是这个原因后,虽然有很多方法可以解决这个问题,想到后面可能也会有同样的问题存在,而且有时候需要获取一些上下文信息什么的,干脆自己封装一个工具类吧!

首先实现ApplicationContextAware接口并且实现对应方法!

当spring一个bean实现了ApplicationContextAware接口,这个bean便可以获取到ApplicationContext对象,进而获取应用上下文中的bean。我们把从上下文中获取的到bean放到自己定义的静态变量ApplicationContext中!

既然想到 都已经写了工具类了干脆把EmbeddedValueResolverAware接口也实现了吧!

EmbeddedValueResolverAware的作用:通常我们使用@Value注解来获取properties文件中值,每个类中都要使用@Value注解也很繁琐,实现EmbeddedValueResolverAware接口后就方便很多!

?实现方法,将对应放至我们自己定义的静态StringValueResolver中!

写完了,非常简单的一个工具类!

?我之前报错的地方,现在通过自己封装的getBean方法获取就行了!

当然,还有配置我们配置文件或者是配置中心里面的值的工具方法也出来了!大家可以通过不同的业务需求 自己封装方法进行获取!!!

第一次发帖子,里面可能很多地方说的不对,不标准或者是错误的地方,希望大佬们多多指出,感谢感谢,我继续改bug去了!大家开心!?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:27:07  更:2021-11-12 19:28:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:23:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码