关于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)此处是浅拷贝

原文地址:https://www.cnblogs.com/inu6/p/11816428.html

时间: 2024-10-13 14:36:08

关于Spring中BeanUtils的一次使用问题记录的相关文章

Apache的BeanUtils和PropertyUtils,Spring的BeanUtils,Cg

作为一个新员工,一个首要的工作就是阅读别人的代码,阅读代码的诸多好处就不说了,我就直奔主题,通过预读代码,发现了几种实现两个不同类型的Bean之间实现值复制的几种方式,上网查询后发现性能上会有差异,于是就萌生自己深入了解几种实现的想法.第一步就是先本着实事求是的原则去探求一下大家总结出来的性能差异是否正确. 比较的是四种复制的方式,分别为Apache的BeanUtils和PropertyUtils,Spring的BeanUtils,Cglib的BeanCopier.做法是在Eclipse新建了一

Spring中@Async用法总结

 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法. 1.  何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果. 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕:而是继续

(转)Spring中@Async用法总结

 原文:http://blog.csdn.net/blueheart20/article/details/44648667 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法. 1.  何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义:同步就是整个处理过

Spring中@Transactional事务回滚实例及源码

一.使用场景举例 在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用.下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设我们默认删除对应的成员.但是在执行的时候可能会出现这种情况,我们先删除部门,再删除成员,但是部门删除成功了,删除成员的时候出异常了.这时候我们希望如果成员删除失败了,之前删除的部门也取消删除.这种场景就可以使用@Transactional事物回滚. 二.checked异常和unc

【spring教程之四】spring中bean的作用域

1. <bean id="stage" class="com.test.pro.Stage"> 在spring中,bean默认都是单例的,也就是说,spring容易只会实例化一次,在以后的每次调用中,都会使用同一个实例.下面的例子可以说明: 2.测试类 package com.test.pro; import org.springframework.context.ApplicationContext; import org.springframewor

spring中依赖注入方式总结

Spring中依赖注入的四种方式 在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的setter方法注入 首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性.例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置se

spring中使用parent属性来减少配置

在基于spring框架开发的项目中,如果有多个bean都是一个类的实力,如配置多个数据源时,大部分配置的属性都一样,只有少部分不一样,经常是copy上一个的定义,然后修改不一样的地方.其实spring bean定义也可以和对象一样进行继承. 示例如下:  <bean id="testBeanParent"  abstract="true"  class="com.wanzheng90.bean.TestBean">         &

Spring中@Resource、@controller注解的含义

@Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI context中的一个对象. Spring确实支持使用@Resource通过JNDI lookup来解析对象,默认地,拥有与@Resource注解所提供名字相匹配的"bean name(bean名字)"的Spring管理对象会被注入. 在下面的例子中,Spring会向加了注解的setter方法传递bean名为"dataSour

spring中的aop注解(整合junit测试)

使用spring中的aop前先来了解一下spring中aop中的一些名词 Joimpoint(连接点):目标对象中,所有可能增强的方法 PointCut(切入点):目标对象,已经增强的方法 Advice(通知/增强):增强的代码 Target(目标对象):被代理对象 Weaving(织入):将通知应用到切入点的过程 Proxy(代理):将通知织入到目标对象之后,形成代理对象 aspect(切面):切入点+通知 一:不使用spring的aop注解 以javaEE中的service层为例 UserS