Cglib中BeanCopier#Generator.generateClass报空指针问题 素颜马尾好姑娘i 2021-06-10 20:40 531阅读 0赞 #### 问题描述: #### ###### 错误日志 ###### java.lang.NullPointerException: null at net.sf.cglib.core.ReflectUtils.getMethodInfo(ReflectUtils.java:421) at cn.com.servyou.framework.beans.TypeAwareBeanCopier$TypeAwareGenerator.generateClass(TypeAwareBeanCopier.java:219) at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) at net.sf.cglib.beans.BeanCopier$Generator.create(BeanCopier.java:90) at cn.com.aaa.framework.beans.TypeAwareBeanCopier.instantiate(TypeAwareBeanCopier.java:77) at cn.com.aaa.framework.beans.ConverterUtil.getBeanCopierInstance(ConverterUtil.java:223) at cn.com.aaa.framework.beans.ConverterUtil.copy(ConverterUtil.java:189) at cn.com.aaa.framework.beans.ConverterUtil.convert(ConverterUtil.java:165) at cn.com.aaa.framework.beans.ConverterUtil.convertList(ConverterUtil.java:114) at cn.com.aaa.framework.beans.ConverterUtil.convertList(ConverterUtil.java:84) 这是一个对象类型属性复制的方法。类似于Spring中的BeanUtil.copyProperties()方法,它是基于Cglib中BeanCopier类实现的。这是类的位置: ![在这里插入图片描述][2020110620351145.png_pic_center] #### 问题原因 #### 通过测试得知,因为我在要复制的A类里面增加了get\*(以get打头的方法)的方法,但没有对应的set方法。另外这个场景也比较特殊,要复制的target类B刚好继承了A类。类似BeanUtil.copyProperties(A,B); #### 源码 #### 简略版的代码 详细的请看:[BeanCopier][] public void generateClass(ClassVisitor v) { // 获取source和target的getter,setter方法 PropertyDescriptor[] getters = ReflectUtils.getBeanGetters(source); // 问题就出在这!!!! PropertyDescriptor[] setters = ReflectUtils.getBeanGetters(target); Map names = new HashMap(); for (int i = 0; i < getters.length; i++) { names.put(getters[i].getName(), getters[i]); } // 遍历target的setter方法,如果source中有同名的get方法,就获取值,复制target for (int i = 0; i < setters.length; i++) { PropertyDescriptor setter = setters[i]; PropertyDescriptor getter = (PropertyDescriptor)names.get(setter.getName()); if (getter != null) { MethodInfo read = ReflectUtils.getMethodInfo(getter.getReadMethod()); MethodInfo write = ReflectUtils.getMethodInfo(setter.getWriteMethod()); ...省略 } } } 上面代码的思路很清晰,获取target的setter方法,根据setter方法去source中找相应的getter方法,如果有,则取值并复制给target。 但问题就出在PropertyDescriptor\[\] setters = ReflectUtils.getBeanGetters(target);一句。我的原意其实是获取target的所有setter,再从source里面找同名的get方法。 可是他为什么取得是getter方法?????? ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzk2ODYxMw_size_16_color_FFFFFF_t_70_pic_center] #### 去github上看看 #### ![Github上源码][Github] 在最新的代码处原来是改过来了。这的确是个bug。修改记录在2015年。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzk2ODYxMw_size_16_color_FFFFFF_t_70_pic_center 1] #### 小结: #### 1、这是一个jar包版本太老了,导致的问题,最新的代码已经修复。 [2020110620351145.png_pic_center]: /images/20210518/ecff9b43ff8c4ee6a7e40b82a5dbbf86.png [BeanCopier]: https://github.com/cglib/cglib/blob/master/cglib/src/main/java/net/sf/cglib/beans/BeanCopier.java [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzk2ODYxMw_size_16_color_FFFFFF_t_70_pic_center]: /images/20210518/24f3df5685094ff79e3af3cbec1b09b3.png [Github]: /images/20210518/5645b707cbb647f4a6dfeaee5e15fcb7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzk2ODYxMw_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20210518/b3f59f6aea944b91928cc92069258ffb.png
相关 Java中的空指针异常问题分析 在Java编程中,空指针异常(NullPointerException)是一种常见的运行时错误。它发生在尝试访问一个null对象的属性或方法时。 问题分析: 1. **代码 悠悠/ 2024年09月19日 02:39/ 0 赞/ 6 阅读
相关 Java中对象引用问题:空指针异常 在Java中,对象引用问题主要表现为空指针异常。这是由于以下几种情况导致的: 1. 访问不存在的对象:当你试图访问一个尚未创建或者已经被垃圾回收的Object时,会抛出空指针 川长思鸟来/ 2024年09月12日 06:45/ 0 赞/ 18 阅读
相关 springboot+mybatis报空指针异常问题 为 数据库编码 和 mybatis编码不同 mybatis编码: driver-class-name: com.mysql.jdbc.Driver ... ﹏ヽ暗。殇╰゛Y/ 2024年04月18日 22:56/ 0 赞/ 36 阅读
相关 javaweb中向集合中添加对象报空指针异常问题的可能原因 javaweb中向集合中添加对象报空指针异常问题的可能原因 参考文章: [(1)javaweb中向集合中添加对象报空指针异常问题的可能原因][1_javaweb] (2) 「爱情、让人受尽委屈。」/ 2022年09月10日 10:23/ 0 赞/ 120 阅读
相关 foreach循环报NPE空指针异常 foreach循环报NPE空指针异常 参考文章: [(1)foreach循环报NPE空指针异常][1_foreach_NPE] (2)https://www.cnblog 男娘i/ 2022年09月04日 13:43/ 0 赞/ 171 阅读
相关 getActionBar() 返回空指针问题 写一个demo的时候需要一个导航栏 运行时显示activiyt打开失败 显示空指针异常 上网找了很多解决方法 最后发现自己因为在写登陆界面的时候加了一句取消标题栏的代码 川长思鸟来/ 2022年08月20日 04:11/ 0 赞/ 126 阅读
相关 java数组使用equals()方法报空指针问题 在学习使用数组的过程中遇到一个问题,用scanner为数组赋值后,使用equals()方法报空指针错误 import java.util.Scanner; 男娘i/ 2022年07月19日 05:58/ 0 赞/ 115 阅读
相关 Spring自动装配报空指针异常 这几天在学Spring的自动装配,自己动手做一个小项目,但是被一个空指针异常卡住了。 启动的时候弹出index.jsp,这是一个登陆页面: <%@ page lan 野性酷女/ 2022年07月12日 16:40/ 0 赞/ 228 阅读
相关 Cglib中BeanCopier#Generator.generateClass报空指针问题 问题描述: 错误日志 java.lang.NullPointerException: null at net.sf.cglib.core.Refl 素颜马尾好姑娘i/ 2021年06月10日 20:40/ 0 赞/ 532 阅读
还没有评论,来说两句吧...