关于Spring中BeanUtils的一次使用问题记录
1.问题描述:今天在进行前后端联调的时候,发现商品图片不能正常显示;
2.排查过程:查看浏览器控制台,发现调用接口返回的数据关于图片的字段未返回数据;
然后,又跑了一下Dao层的单元测试,从数据库中拿出数据正常;
那基本确认就是代码中数据转换转丢了,打了下debug,果然如此,在BeanUtils.copyProperties(productInfo, productInfoVO)处转换的问题;
3.原因:图片字段的值未能正确的拷贝过去,是因为两个Bean的icon(图片)字段未对应;
4.动手
log.info("两个对象的比较:{}",productInfo.getProductIcon() == productInfoVO.getProductIcon());
log.info("productInfo的hashcode:{}",productInfo.getProductIcon().hashCode());
log.info("productInfoVO的hashcode:{}",productInfoVO.getProductIcon().hashCode());

icon字段为String类型的,此处显示为同一个对象,所以为浅拷贝;
字段多的Bean转换到字段少的Bean
BeanUtils.copyProperties(productInfo, productInfoVO);

反过来再试下
BeanUtils.copyProperties(productInfoVO, productInfo);

5.总结使用BeanUtils.copyProperties()的注意点:
BeanUtils.copyProperties(productInfo, productInfoVO) 作用:将一个实体的值拷贝到另一个实体,避免了对Bean大量的get,set;
(1)拷贝关系:前面参数的值拷贝到后面参数中,即productInfo拷贝到productInfoVO;apache也有一个BeanUtils,顺序恰好相反;
(2)字段对应:字段要相同,不然会赋值失败;
(3)此处是浅拷贝
关于Spring中BeanUtils的一次使用问题记录的更多相关文章
- Spring中可以复用的工具类&特性记录
Spring 里有用工具类: GenericTypeResolver 解析泛型类型.核心逻辑还是调用 ResolvableTypeResolvableType 解析泛型类型 BeanWrapper 利 ...
- Spring中的BeanUtils与apache commons中的BeanUtils用法[1]
1. 前言 在开发过程中,经常遇到把要给一个bean的属性赋给另外一个bean.最笨的方法是每个属性都单独写一个,聪明的方法是应用反射写一个工具方法.考虑到这个需求基本每个程序员都会遇到,那么一定已经 ...
- Spring中使用的设计模式
目录 Spring使用的设计模式 1.单例模式 2.原型模式 3.模板模式 4.观察者模式 5.工厂模式 简单工厂模式 工厂方法模式 6.适配器模式 7.装饰者模式 8.代理模式 9.策略模式 S ...
- 0000 - Spring 中常用注解原理剖析
1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...
- Spring 中常用注解原理剖析
前言 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来配置 ...
- Spring中Bean的实例化与DI的过程
引言 前文我们介绍了关于如何学习Spring的源码以及解析了spring中加载配置文件注册Beandefinition的过程.今天我们继续学习DI的过程. 创建实例和DI过程 IOC和DI都是对spr ...
- spring中BeanPostProcessor之二:CommonAnnotationBeanPostProcessor(01)
在上篇博客中分享了InstantiationAwareBeanPostProcessor接口中的四个方法,分别对其进行了详细的介绍,在文末留下了一个问题,那就是postProcessPropertie ...
- 谈谈Spring中的对象跟Bean,你知道Spring怎么创建对象的吗?
本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 推荐阅读: Spring官网阅读 | 总结篇 Spring杂 ...
- 这篇文章,我们来谈一谈Spring中的属性注入
本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...
随机推荐
- Android Studio 连接夜神模拟器
网上找到的解决是需要我们 然后运行cmd命令,cd到夜神安装目录,执行命令 nox_adb.exe connect 127.0.0.1:62001
- 工具 - VNC
安装 ubuntu下vnc客户端的安装命令sudo apt-get install xtightvncviewer 重置密码 cd /root/.vnc/ rm -rf passwd vncserve ...
- SQL Puzzle
1. 按条件分块取数据 有表A(CD),数据为 要求:当有CD为0的记录时,取得结果为0, 当表中没有CD=0的记录时,取得的结果为1,2,3(将CD<>0的记录都取出来) 可行SQL脚本 ...
- js 判断是不是数字||判断字符串是不是数字(正则表达式)
js使用正则表达式判断对象是不是数字,或者字符串是不是数字,或者是不是数字类型 //判断是不是一个数字 或者 一个字符串里全是数字 isNumber (value) { if (value === u ...
- JVM-堆内存
1. java堆内存介绍 java的堆内存可以类比于计算机的内存,是存储整个机器数据的地方. (1)jvm一起动就创建java堆.类比计算机一起动就加载内存. (2)所有的线程共享.类比计算机所有进程 ...
- Java ——数字图像处理(Java Graphics及其API简介)
1.创建一个Graphics对象BufferedImage bi = new BufferedImage(120,120, BufferedImage.TYPE_INT_ARGB);Graphics2 ...
- 处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外
//处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 function forbidBackSpace(e) { var ev = e || window.event; //获 ...
- Linux基础命令一(补充)
echo ls ls–l ---- ll cd / 根目录 cd ~ cd - 返回上一个目录 env ip addr 显示物理网络地址,缩写:ip a /etc/init.d/network ...
- mybatis的<用<![CDATA[]] 忽略解析
1 CDATA 术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 &quo ...
- 行人重识别(ReID) ——概述
什么是Re-ID? 行人重识别(Person re-identification,简称Re-ID)也称行人再识别,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术.广泛被认为是一个图像 ...