当前位置: 首页 > 网络应用技术

春天

时间:2023-03-06 12:38:27 网络应用技术

  在我们的项目中,我们经常使用spring的beanutils.copyproperties()方法来复制对象之间的属性,以替换乏味的get()和set()methodsss.s.s..但是,如果您不关注,您将有意外的问题。,谈论普通坑并从源代码的角度分析问题的原因。

  常见的“坑” 1.获取不声明属性的方法。该属性通常在复制失败的实际项目中使用lombok插件的@DATA注释以省略get,set方法

  从调试的角度来看,目标属性尚未成功复制。

  2.副本是浅副本(引用复制对象)

  3.在弹簧的不同版本之后,在属性通用处理方法的不同弹簧5.3之后,遵循源属性的遗传对象和目标对象,这意味着当复制属性时,它将确定属性是否确定是相同的。,直接忽略属性的副本。

  5.3.8正在运行:targetBean的ID仍然为空

  5.2.10正在运行:targetBean的IDS复制SourceBean的IDS

  4.当语句中没有共识属性时,可能会发生由目标bean复制的实际类型成员资格属性,这可能会导致运行错误。驱成上述bean,执行以下代码,在运行时会抛出异常

  beanutils.copyproperties()源代码分析上面提到的常见“坑”,请查看Spring的Beanutils.copyproperties()方法源代码,很容易找到问题的原因。

  源代码的核心部分(版本5.3.8):

  从源代码可以看出:

  总结beanutils.copyproperties()更适合简单的豆拷贝。如果Bean的属性很复杂,则很容易引起由于浅拷贝而引起的一系列问题,并且CopyProperties方法的实现过程并不简单。与使用GET和SET方法相比,其性能开销更大。