【项目排错】谨防不同包下的BeanUtils混用

news/2024/11/24 11:55:38/

今天排查项目里一个奇奇怪怪的NPE问题,经过调试,最后竟是混用了不同包的BeanUtils所导致的,这里记录一下。


在 Java 中,有多个不同包下的 BeanUtils 类存在。这些类提供了类似的功能,但由于它们来自不同的库或框架,可能有一些差异。其中最明显的差异就是source bean和target bean的位置不同。

下面是一些常见的BeanUtils类:

  • org.apache.commons.beanutils.BeanUtils:
    这个 BeanUtils 类是 Apache Commons BeanUtils 库中提供的,用于实现 JavaBean 属性的拷贝和转换。它提供了诸如 copyProperties 方法等功能,用于将一个 JavaBean 的属性拷贝到另一个 JavaBean。

  • org.springframework.beans.BeanUtils:
    这个 BeanUtils 类是 Spring Framework 中提供的,用于处理 JavaBean 的操作。它提供了一些与 Apache Commons BeanUtils 类似的功能,如 copyProperties 方法,同时还支持更多 Spring 特定的功能,如类型转换、属性填充等。

  • net.sf.cglib.beans.BeanCopier:
    这个 BeanCopier 类是 CGLIB 库中提供的,它提供了高性能的 JavaBean 属性拷贝功能。与前两者不同,CGLIB 的 BeanCopier 类使用动态代码生成技术,以达到更高的性能。

在这里插入图片描述
在这里插入图片描述

其中,org.springframework.beans.BeanUtils把bean从A拷贝到B,org.apache.commons.beanutils.BeanUtils把bean从B拷贝到A。

凡是用到了BeanUtils的地方(特别是copy代码的时候),务必看清导的是哪个包


ATFWUS 2023-08-04


http://www.ppmy.cn/news/1005982.html

相关文章

GEE:分层抽样

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine (GEE) 平台上,实现在每一个类别中分别提取指定比例(本例50%)的样本数据得到一个新的矢量数据的代码。该过程为分层抽样。该方法可用于机器学习分类中,用于减少误差,提高效率,减少计算资源,增加样本代表性。 结…

化学合成有机化学 | 逆合成分析软件/数据库汇总

化合物逆合成路线设计软件是一类用于辅助化学家设计化合物合成路线的工具。这些软件通常基于化学知识和反应数据库,能够根据目标化合物的结构和性质,提供合成路线的建议和优化方案。以下是一些常见的化合物逆合成路线设计软件: IntSynth&…

增量式PID算法及其MATLAB实现

增量式PID算法是一种常用的控制算法,用于控制系统中的反馈控制。它通过对系统的误差进行递推式的计算,实现对系统输出的调节,使得系统的输出逐渐趋向于设定值。 delta u(k)=u(k)-u(k-1)=Kp*(e(k)-e(k-1))+Ki*e(k)+Kd*(e(k)-2*e(k-1)+e(k-2)) PID算法由三个部分组成:比例(…

Day 12 C++ 面向对象

目录 什么是面向对象 C面向对象 C面向对象的三大特性 封装 继承 多态 其他概念 构造函数和析构函数 运算符重载 动态内存管理 C 友元(friend) C对象模型和this指针 ps:本文章只是总结和大纲,详细知识请点击蓝字进相应的链接了解 什…

简单游戏截图_可控截取内容2

一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…

HOT74-数组中的第K个最大元素

leetcode原题链接:数组中的第K个最大元素 题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O…

go test

关于go test 报错 command-line-arguments go test 直接调用被测试go文件方法时候报错 command-line-arguments [command-line-arguments.test],这里已经明确指出了命令参数问题 PS E:\code\mqtt> go test .\client_test.go # command-line-arguments [comma…

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)? ❤️‍🔥 前面已经解释了什么是算法? 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题,我们往往有很多种解决思路和方法&#x…