| |
|
开发:
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注解,然后我就具体给他解释了: 知道这个问题 是因为对象还没有没有正常初始化才导致的 后面就好办了,查出具体问题的位置,原因 改呗 ! 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去了!大家开心!? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |