首页 > 其他分享 >BeanUtils 的 copyProperties 踩坑记录

BeanUtils 的 copyProperties 踩坑记录

时间:2024-01-18 18:45:06浏览次数:23  
标签:username String 记录 copyProperties pwd User BeanUtils public

代码示例

import org.apache.commons.beanutils.BeanUtils;

public class TestBeanUtils {
    public static void main(String[] args) throws Exception {
        testApacheBeanUtils();
        testSpringBeanUtils();
    }

    private static void testSpringBeanUtils() {
        User user = new User().setUsername("lisi").setPwd("123");
        User copyUser = new User();
		// 目标对象在后
        org.springframework.beans.BeanUtils.copyProperties(user, copyUser);
        System.out.println(copyUser);// User{username='lisi', pwd='123'}
    }

    private static void testApacheBeanUtils() throws Exception {
        User user = new User().setUsername("lisi").setPwd("123");
        User copyUser = new User();
		// 目标对象在前
        BeanUtils.copyProperties(copyUser, user);
        System.out.println(copyUser); // User{username='null', pwd='null'}
    }

    public static class User {
        private String username;
        private String pwd;

        public User setUsername(String username) {
            this.username = username;
            return this;
        }

        public String getUsername() {
            return username;
        }

        public User setPwd(String pwd) {
            this.pwd = pwd;
            return this;
        }

        public String getPwd() {
            return pwd;
        }

        @Override
        public String toString() {
            return "User{" +
                    "username='" + username + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
}

测试使用 apache 及 spring 的 copyProperties 功能,在上述场景中,apache 的 BeanUtils 不能 copy 属性值。

原因分析

apache 的 BeanUtils 的 copyProperties 最终使用的是 java 内部的 Introspector 的 getTargetPropertyInfo() 来获取可 copy 所有属性,默认取返回类型为 void 的 set 方法

image

spring 的 BeanUtils 通过 ExtendedBeanInfo(继承 BeanInfo) 重写了获取 set 方法的逻辑,所以不存在这个问题。

image

总结

使用 BeanUtils 的 copyProperties 功能,虽然可以少写很多代码,但很容易踩坑,还有一个问题就是,后续如果我们想根据属性名定位到哪些地方使用了(set),也没办法定位。

参考

BeanUtils.copyProperties使用和性能分析

标签:username,String,记录,copyProperties,pwd,User,BeanUtils,public
From: https://www.cnblogs.com/strongmore/p/17963520

相关文章

  • 记录--Object.assign 这算是深拷贝吗
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助在JavaScript中,Object.assign()是一个用于合并对象属性的常见方法。然而,对于许多开发者来说,关于它是否执行深拷贝的认识可能存在一些混淆。先说答案Object.assign()不属于深拷贝,我们接着往下看。Object.assign(......
  • 关于2023分子植物育种大会随笔记录与思考
    目录智能育种转基因基因编辑育种实践2023年底分子植物育种大会在成都举行,会后要点胡乱记录之。有些来自嘉宾观点,有些是个人思考,杂糅一起,仅供参考。智能育种分子设计育种:形态、生理、基因、等位基因、单倍型、基因组区段、通路、网络、表观组。统言之,生物相关分子皆可设计。科迪华玉......
  • 使用过滤器记录api接口访问时长并记录日志
    usingERP.Helper;usingERP.Models.User;usingSystem;usingSystem.Diagnostics;usingSystem.Web;usingSystem.Web.Http.Controllers;usingSystem.Web.Http.Filters;usingActionFilterAttribute=System.Web.Http.Filters.ActionFilterAttribute;usingLogger......
  • 记录 | vscode json美化插件JSON Tools
    安装插件JSONTools原来的json的样子:JSONTools美化/格式化快捷键Ctrl+Alt+M(windows)/Command+Option+M(Mac),然后效果如下:......
  • 记录 | conda报错:conda json.decoder.JSONDecodeError: Expecting value: line 1 colu
    condacreate的时候报错:condajson.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)解决办法:condaclean-i......
  • 个人面试笔试记录与复盘
    据说把鼠标放在标题后面可以查看目录哦~用时间洪流泡的茶,根本就品不出茶味,所以,不要诧异,坚定步伐,慢慢细品,就好! 红色是雷,绿色是个人感觉公司氛围挺不错,黑色为没从hr/面试官对话中体会到公司氛围。瑞鑫天算社招,上来笔试180题,6套题(C++,python,强化学习,机器学习,numpy,pandas),30......
  • sql-labs通关记录
    less9这一关是考察盲注先利用时间盲注观察闭合形式之后用python脚本进行注入我这里是ctfshow里面的题目可以对照修改代码点击查看代码importrequestsif__name__=='__main__':url='http://sql/Less-9/?id=1%27'result=''i=0whileTrue:......
  • 毕设记录-软件设想
    记录第一次和老师交流为了最终呈现软件-----使用pycharm?针对遥感影像(不同于普通图像-所使用的库不同、数据更多)先期实现对简单图像的处理软件OR询问老师遥感影像数据,直接使用数据进行开发又从GitHub上找了两个类似的项目可以借鉴......
  • 【比赛记录】国庆集训合集
    联赛组国庆训练1\(\text{T1}\)GirlFriend区间3好题。先把质数筛了。考虑将所有区间按照左右端点离散化。将询问离线下来,然后对于每个右端点统计左端点上的贡献。即从小到大扫描\(r\),维护每一个后缀的答案。考虑使用set维护区间的并。考虑已处理前\(r-1\)的询问,处......
  • 拓扑排序_学习记录
    拓扑排序_学习记录第一次在读入数据时被TLE……Whatis拓扑排序?拓扑排序——Topologicalsorting(所以说写函数名时用ts而不是tp),拓扑排序要解决的问题是给一个有向无环图的所有节点排序。顾名思义,就是可以把一个有向的无环的图中所有的点按照一定规则排序的算法……emm......