【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?

沙海 2021年7月15日01:04:32Java评论62字数 2106阅读7分1秒阅读模式
摘要

智能摘要

智能摘要文章源自JAVA秀-https://www.javaxiu.com/37840.html

点击上方"Java基基",选择"设为星标"做积极的人,而不是积极废人!通过new对象方式新建的话,Spring容器就不会自动注入TestDao,此时testDao为null,会报空指针异常。在程序启动时,Spring会按照一定的加载链来加载并初始化Spring容器中的组件。在A中调用B,来使用B中调用C的方法时,如果不采用自动注入,而是使用new对象方式的话,就会报空指针异常(因为B中的C并没有被初始化)。文章源自JAVA秀-https://www.javaxiu.com/37840.html

原文约 2833 | 图片 6 | 建议阅读 6 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?

点击关注 ? Java基基 文章源自JAVA秀-https://www.javaxiu.com/37840.html

收录于话题文章源自JAVA秀-https://www.javaxiu.com/37840.html

#Java基基文章源自JAVA秀-https://www.javaxiu.com/37840.html

228个文章源自JAVA秀-https://www.javaxiu.com/37840.html

点击上方“Java基基”,选择“设为星标”文章源自JAVA秀-https://www.javaxiu.com/37840.html

做积极的人,而不是积极废人!文章源自JAVA秀-https://www.javaxiu.com/37840.html

文章源自JAVA秀-https://www.javaxiu.com/37840.html

源码精品专栏文章源自JAVA秀-https://www.javaxiu.com/37840.html

 文章源自JAVA秀-https://www.javaxiu.com/37840.html

文章源自JAVA秀-https://www.javaxiu.com/37840.html

来源:blog.csdn.net/LuQiaoYa/文章源自JAVA秀-https://www.javaxiu.com/37840.html

article/details/111573886文章源自JAVA秀-https://www.javaxiu.com/37840.html

  • 原因文章源自JAVA秀-https://www.javaxiu.com/37840.html

  • 例一文章源自JAVA秀-https://www.javaxiu.com/37840.html

  • 例二文章源自JAVA秀-https://www.javaxiu.com/37840.html

  • 总结【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

原因

根本原因在于当Spring框架帮我们管理的时候就会自动的初始化接下来会用到的属性,而通过new对象的方式,在该new对象中使用到的一些实例就需要自己去做初始化,否则就会报空指针异常。文章源自JAVA秀-https://www.javaxiu.com/37840.html

如下例子所示:文章源自JAVA秀-https://www.javaxiu.com/37840.html

TestService 通过@Autowired注入,那么Spring容器就会自动注入TestService 中会用到的TestDao。文章源自JAVA秀-https://www.javaxiu.com/37840.html

如例一所示。文章源自JAVA秀-https://www.javaxiu.com/37840.html

例一

@RestController@RequestMapping(value = "/test")public class TestController {    @Autowired    private TestService testService;    @RequestMapping(value = "/print",method = RequestMethod.GET)    public void test() {        testService.test();    }}@Servicepublic class TestService {    @Autowired    private TestDao testDao;    public void test() {        testDao.test();    }}

如果TestService 通过new对象方式新建的话,Spring容器就不会自动注入TestDao,此时testDao为null,会报空指针异常。此时就需要在TestService中自己new一个TestDao对象。如例二所示。文章源自JAVA秀-https://www.javaxiu.com/37840.html

例二

@RestController@RequestMapping(value = "/test")public class TestController {    private TestService testService = new TestService ();    @RequestMapping(value = "/print",method = RequestMethod.GET)    public void test() {        testService.test();    }}@Servicepublic class TestService {    @Autowired    private TestDao testDao;    public void test() {        TestDao  testDao = new TestDao ();        testDao.test();    }}

总结

在程序启动时,Spring会按照一定的加载链来加载并初始化Spring容器中的组件。文章源自JAVA秀-https://www.javaxiu.com/37840.html

例如:在A中注入B,B中注入C。在A中调用B,来使用B中调用C的方法时,如果不采用自动注入,而是使用new对象方式的话,就会报空指针异常(因为B中的C并没有被初始化)。文章源自JAVA秀-https://www.javaxiu.com/37840.html

- END -文章源自JAVA秀-https://www.javaxiu.com/37840.html

文章源自JAVA秀-https://www.javaxiu.com/37840.html

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

已在知识星球更新源码解析如下:文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

【面朝大厂】面试官:为什么在new 对象里面使用自动注入对象会报空指针异常?文章源自JAVA秀-https://www.javaxiu.com/37840.html

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。文章源自JAVA秀-https://www.javaxiu.com/37840.html

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。文章源自JAVA秀-https://www.javaxiu.com/37840.html

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。文章源自JAVA秀-https://www.javaxiu.com/37840.html

文章源自JAVA秀-https://www.javaxiu.com/37840.html

文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*)
文章源自JAVA秀-https://www.javaxiu.com/37840.html

阅读原文文章源自JAVA秀-https://www.javaxiu.com/37840.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定