Lombok注解引发的空指针问题分析
💡
原文中文,约4700字,阅读约需12分钟。
📝
内容提要
在一次上线后,日志中出现空指针的报错,但是报错代码位置以及相应工具类未进行过修改。问题出在工具类的copyProperties方法,该方法使用了@Accessors(chain = true)注解的类在获取属性描述PropertyDescriptor时会出现空指针问题。解决办法是删除该注解或替换对象拷贝的工具类。
🎯
关键要点
- 上线后日志出现空指针报错,报错代码位置未修改。
- 问题出在工具类的copyProperties方法,使用@Accessors(chain = true)注解的类导致空指针问题。
- Lombok的@Accessors注解使得set方法返回this对象,影响Introspector对写入方法的判断。
- BeanCopier依赖Introspector的writeMethod,导致无法获取属性的写入方法,从而出现空指针。
- 解决办法包括删除@Accessors注解或替换对象拷贝工具类。
- 建议使用MapStruct配合Lombok,生成更安全的get/set方法。
- 依赖JDK Introspector的工具类在使用@Accessors时需谨慎,可能导致对象拷贝问题。
➡️