文档章节

基础知识的困惑让BUG更隐蔽

艳沐石
 艳沐石
发布于 2014/09/15 18:52
字数 735
阅读 15
收藏 0

有时候,经常会有的人觉得基础知识有什么用?面试那么多,流于形式。无奈,一直我热衷于java基础的人,也忽略了很多细节,直至在一个bug面前,苦思冥想。

问题是由于什么引起的呢?多态。在父类继承子类的时候,发生的故事。先描述一下背景。

1. 写了一个这样的类,作用不再描述
这里写了getter/setter方法,已经OK了。

2. 在spring的配置文件中,我也遵守spring的规则配置完毕

以上,两点,大家都不需要质疑。配置完全正确。

问题是什么呢?在类中,调用merchantSalePlatRecordMapper方法的时候,出现空指针。通过代码跟踪发现这个对象为NULL。再通过跟踪代码,发现这个对象的值已经设置完毕。

迷惑在哪里?迷惑在为什么设置的值里没有了东西?

这种现象曾经出现过,主要是由于,同一个ID的Bean被同事设置两次,导致实际使用的Bean为没有赋值的Bean。他本以为是会关联上了(混淆了ref的作用)。于是,我也按照这个思路继续思考,这个时候我就陷入了一个坑里。期间,我查询了对应的Bean,在配置文件中,的确是有一份。不会重复。

后来,通过跟踪代码,我发现他的merchantSalePlatRecordMapper在一个类里有两份。而且名字不一样?我当时觉得奇怪,但是我没有仔细想(经验不足)。后来,同事告诉我,RestrictUpCreateRecordHandler有子类,子类里注入了merchantSalePlatRecordMapper。于是,我们看一下子类。

此时也存在merchantSalePlatRecordMapper的getter/setter方法。

看到这里,我想大家应该明白。同事编写的代码,由于merchantSalePlatRecordMapper是private作用域,那么在子类和父类中,分别存在一份。那么,同时又在两个类中做了get/set方法,导致了子类的merchantSalePlatRecordMapper被注入,而父类中没有执行注入。

总结:
1. 在此次调整中,对问题的细节把握不够清晰,而且陷入了经验主义,导致问题定位不准,修复时间过长。
2. 我鼓励大家多做重构,提高代码复用性,过分迷惑同事,暴露基础薄弱的缺点。
3. 在分析问题之前,应该尽可能的对问题把握清晰。相互关系梳理好,再做。避免陷入自己的泥潭。

在这里推荐一种调试方法:Tomcat远程调试(参考)。

© 著作权归作者所有

上一篇: Tomcat远程调试
艳沐石
粉丝 3
博文 44
码字总数 24375
作品 0
大兴
程序员
私信 提问
一个小phper的迷茫

本人2011年3月份开始,在上海一家很牛逼的做B2C网站的公司实习,然后七月份转正一直到2012年10月份离职。期间一直在 做网站维护的工作,解决BUG,包括一些前后台二次开发,系统间数据通信等。...

just_so_so
2013/01/24
1K
16
动画:面试官问我 0.1 + 0.2 __ 0.3 ? 为什么?该如何正确回答?

写在前边 第一次去面试,面试官问我0.1 + 0,2 0.3?估计很多人都知道在 JS 中0.1 + 0.2 != 0.3 的,至于大于还是小于还真没弄明白。 像这种变态的问题,在 JS 中存在很多,那小鹿就干脆整理成...

一只不甘平凡的小鹿
10/10
0
0
浅谈零基础新手学HTML5前端开发学习路线

  浅谈HTML5前端开发学习路线。学习HTML5开发先学学HTML、CSS3、JS这些基本的知识,HTML5学习入门的内容基本差不多,但是学习的成果却千差万别,这就是所谓的基础,所谓万丈高楼平地起,地...

Java编程语言基础入门博客
2017/04/04
0
0
机器学习中那些必要又困惑的数学知识

现在很多想从事于机器学习的朋友都存在很多困惑,主要是很多相关的书看不懂,尤其是数学部分,机器学习的基础是数学。数学并非是一个可选可不选的理论方法,而是不可或缺的支柱。对于机器学习...

酒逢知己千杯少
2018/12/03
29
0
迄今为止见过最牛逼的程序员,48小时写完街头霸王,不愧代码之王

今天小编我逛论坛,看到了一位大佬程序员分享的游戏,使用JavaScript做的,大佬10小时就搞定了这个小游戏,不愧是前端领域的顶尖人物,抱着膜拜的心情,小编我也下载了一份源码进行学习运行,...

小b狸猫
2017/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

新建时隐藏按钮,显示明细时显示

在InitControl()中 if (saTableKeys != null) { rpgDesign.Visible = true; rpgPrint.Visible = true; }......

_Somuns
34分钟前
5
0
【实战演练,拒绝996】-SpringBoot2.x自定义Spring boot Starter

欢迎关注 提升能力,涨薪可待 面试知识,工作可待 实战演练,拒绝996 如果此文对你有帮助、喜欢的话,那就点个赞呗! 前言 是不是感觉在工作上难于晋升了呢? 是不是感觉找工作面试是那么难呢...

ccww_
36分钟前
10
0
SpringBoot从入门到放弃,原理篇-自动配置原理

SpringBoot从入门到放弃,原理篇-自动配置原理 springboot自动配置原理 配置文件能配置的属性参照 自动配置原理 1、springboot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfig...

有一个小阿飞
今天
11
0
php变量和数据类型

php中的变量 PHP中的变量声明 PHP中的变量的使用 PHP中的数据类型之整型 PHP数据类型之浮点类型和布尔类型 PHP数据类型之字符串类型 PHP数据类型之heredoc和nowdoc的使用 PHP数据类型之复合类...

达达前端小酒馆
今天
7
0
OSChina 周日乱弹 —— 沙发忽然就爆炸了,吓死我了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】@这次装个文艺青年吧:#今日歌曲推荐# 分享Vicetone/Youngblood Hawke的单曲《Landslide》: 《Landslide》- Vicetone/Youngblood Hawke 手机党...

小小编辑
今天
253
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部