关于BeanUtils.copyProperties() 方法的问题

来源:5-1 SpringBoot 资源文件属性配置

濸笙

2018-07-20 22:15

BeanUtils.copyProperties(obj1,obj2)这个方法难道不是将obj2的值赋给obj1吗,而老师说最开始加载resource的时候属性值就会一一对应赋值,而Resource bean = new Resource()中的bean是new出来,应该没有值,按照老师代码中的顺序BeanUtils.copyProperties(resource,bean)这不是把bean的值赋给resource吗,那bean中依旧是没有值的哇?没明白这个问题。


写回答 关注

4回答

  • 慕粉9256971
    2018-11-21 16:38:22

    这个我看视频的时候也想到了,然后测试了一下,直接让return resource;的话会出现错误的,不会正确显示的。你把它toString输出一下,可以看到自动装配后的resource是一个完整类名加后面一串类似这样的东西“$$EnhancerBySpringCGLIB$$9a1fe978@5eef9e0”,这说明它是spring给你生成的一个原来类的动态代理。这个动态代理是不能通过json显示出来的。

    Henry_...

    说得对

    2018-12-05 02:18:17

    共 1 条回复 >

  • hemimTNT
    2018-08-22 22:08:00

    这个自己测试下就知道了。第一次通过资源文件映射的bean不是标准的Resource类的,带有其他的属性,这时候直接返回的话jackson无法转换,会报错。所以我们可以看到通过BeanUtils.copyProperties来获取标准的Resource类的bean,这时候就可以进行json转换了。

    一个霸气侧漏...

    谢大佬,我说怎么不能直接返回resource呢(我没按照老师的打BeanUtils.copyProperties(),所以出错了还不知道因为啥。。。)

    2019-07-07 14:17:47

    共 1 条回复 >

  • 慕少4489455
    2018-08-12 10:29:51

    resource是交给Spring创建的单实例对象,在项目启动时Spring就会按照注解配置给该对象赋值。而new出来的bean对象,虽然与resource使用的同样的class对象,但却是不同的加载方式,不会有初始值。

  • 慕粉9441406
    2018-07-21 12:17:34

    你可能有些问题没想明白,我简单说下问题的关键。

    首先,老师是创建了资源配置文件,并设置了几个属性值,如下图:

    https://img4.mukewang.com/5b52b25d0001310004860084.jpg

    然后在Resource类中通过注解的方式为每个成员变量都读取设置了上面资源配置文件里的属性值,如下图:

    https://img4.mukewang.com/5b52b2c5000191f606020155.jpg

    这样简单来说,Resource类中定义的成员变量其实都是有值的,效果如下图:

    https://img3.mukewang.com/5b52b34c0001053006840215.jpg

    认真对比上面两张图,应该明白了吧,在你new出Resource对象时,其实该对象的每个属性都是有值的。上面的我个人的浅显理解,可能叙述不太准确,目前,我也在积极学习中,正好看到你的问题,希望可以帮到你,。

    濸笙

    .....在这里bean是没有初始值的,而且还有两个不同的BeanUtils类, 一个为org.springframework.beans.BeanUtils, 另一个是org.apache.commons.beanutils.BeanUtils, 这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。 被这个给迷了

    2018-07-22 18:32:25

    共 2 条回复 >

SpringBoot开发常用技术整合

SpringBoot 极简开发的框架整合利器

102172 学习 · 508 问题

查看课程

相似问题