为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


正在回答

4 回答

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

1 回复 有任何疑惑可以回复我~
#1

Henry_Liu

说得对
2018-12-05 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

一个霸气侧漏的名字

谢大佬,我说怎么不能直接返回resource呢(我没按照老师的打BeanUtils.copyProperties(),所以出错了还不知道因为啥。。。)
2019-07-07 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

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

https://img1.sycdn.imooc.com//5b52b25d0001310004860084.jpg

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

https://img1.sycdn.imooc.com//5b52b2c5000191f606020155.jpg

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

https://img1.sycdn.imooc.com//5b52b34c0001053006840215.jpg

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

0 回复 有任何疑惑可以回复我~
#1

濸笙 提问者

bean本来就有值了,而他输出的是bean,那他代码中属性值拷贝还有必要吗?
2018-07-22 回复 有任何疑惑可以回复我~
#2

濸笙 提问者

.....在这里bean是没有初始值的,而且还有两个不同的BeanUtils类, 一个为org.springframework.beans.BeanUtils, 另一个是org.apache.commons.beanutils.BeanUtils, 这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。 被这个给迷了
2018-07-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信