美文网首页Java开发工程师VJava 后台开发工具类
使用注解实现不同字段值的bean的属性拷贝

使用注解实现不同字段值的bean的属性拷贝

作者: makizby | 来源:发表于2019-11-20 23:00 被阅读0次

        今天在工作中遇到了一个问题,就是获取了A对象,需要把A对象的某些属性值拷贝到B对象当中,我们都知道在有相同字段的情况下可以使用Spring提供的工具类BeanUtils.copyProperties(Source, Target)来实现。但是在字段名称不同的情况下,这个方法就无能为力了,因此我们需要自己去实现一个工具类来实现这个功能。

        整体的设计思路很简单,定义一个注解,用于标注目标对象的字段,标明这个字段的来源字段是哪个,比如Source对象的userId字段对应Target字段的id,那我们就在id字段加上自定义的注解,注解中标明属性拷贝的时候来源字段是Source对象的userId,接着我们在工具类中仿照BeanUtils.copyProperties方法,先获取到目标对象的set方法,然后从源对象中取值放入目标对象中,从而完成对不同字段的拷贝。

        首先完成自定义的注解@CopyField,其中定义一个方法source(),用于标注目标对象的来源,代码如下:

@CopyField注解

        然后新建BeanUtils类,在其中仿照BeanUtils.copyProperties来写自己的方法,思路还是按照一开始的整体思路来,首先利用反射获取到目标对象的所有字段,并遍历进行解析,解析字段的时候判断当前字段属性是否有@CopyField注解,有的话则获取其中的sourceName并获取当前字段属性的set方法,再然后根据sourceName从源对象中获取对应字段的get方法取出源值,然后调用set方法将值放入目标对象当中,整体方法代码如下:

copyProperties方法

           代码已经完成接下来进行一下测试,新建SourceUser类和TargetUser类:

TargetUser类 SourceUser

        可以看到我们在TargetUser类上使用了我们的自定义注解,标明在复制的时候,字段对应来源是源对象的UsernameUserId字段。接下来进行测试。新建test类,在main方法中new一个SourceUser对象,并且使用我们的拷贝方法:

测试类

        从测试结果中可以看到SourceTarget的字段已经成功拷贝到了TargetUser中,并且不影响相同字段(图中的sex字段)的拷贝。

        一个小小的技巧,希望对遇到这个问题的人有一点小小的参考价值。

相关文章

  • 使用注解实现不同字段值的bean的属性拷贝

    今天在工作中遇到了一个问题,就是获取了A对象,需要把A对象的某些属性值拷贝到B对象当中,我们都知道在有相同...

  • @NotNull和@NonNull区别和使用

    @NotNull使用在Bean的字段注解中。它是 JSR303(Bean的校验框架)的注解,在controller...

  • 自定义读取csv

    1.注解:如果表中字段的属性和bean的属性相同,那么就不需要注解,如果不相同就需要写注解。比如字段名name_p...

  • Mybatis-plus使用注解 @TableField(exi

    @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项...

  • 反射

    使用反射获取字段注解、字段值

  • spring--基于ioc的注解方式

    Sping的bean管理(注解) 注解 代码里面特殊标记,使用注解可以完成相应的功能注解写法: @注解名称(属性名...

  • 2020-11-17

    浅拷贝,深拷贝针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值...

  • Spring Boot中用注解实现注册bean详解

    一、 什么是java bean 二、实现注册bean的方法 使用的注解 代码实现参考文章 @bean 中的name...

  • Jackson时间处理

    测试用例: bean的Date字段没加JsonFormate注解 bean的Date字段加上JsonFormate...

  • @Required 、@Autowired、@Qualifier

    @Required 这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装...

网友评论

    本文标题:使用注解实现不同字段值的bean的属性拷贝

    本文链接:https://www.haomeiwen.com/subject/ecvaictx.html