BeanMapping

为了更加灵活的指定映射方式,0.0.2 版本引入了 @BeanMapping 注解。

注解的定义

注解定义在 bean-mapping-api 模块中,bean-mapping-core 会默认引入此模块。

package com.github.houbb.bean.mapping.api.annotation;import com.github.houbb.bean.mapping.api.core.ICondition;
import com.github.houbb.bean.mapping.api.core.IConvert;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** <p> BeanMapping 注解 </p>** <pre> Created: 2019/2/19 10:11 PM  </pre>* <pre> Project: bean-mapping  </pre>** @author houbinbin* @since 0.1.0*/
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BeanMapping {/*** 字段的名称* 如果不填,则默认使用字段的名称* 1. 会将 source 的值赋值给 target 和当前 name 属性一致的对象。* @return 名称*/String name() default "";/*** 生效条件* 1. 默认为生效* 2. 当放在 source 字段上时,表示是否将值赋给 target 字段* 当放在 target 字段上时,表示是否接受赋值。* 3. source+target只有同时生效时,才会发生赋值。* @return 具体的生效实现*/Class<? extends ICondition> condition() default ICondition.class;/*** 类型转换* 1. 默认不进行转换* 2. 为了确保转换的确定性+灵活性。对象中指定这个属性,不会改变对象的属性值和类型。* 如果要改变原来的值,那么类型就会被限制的很多,无法足够的灵活。* 3. 只有当 source 的值转换后可以设置给 target,才会将 source 转换后的值赋值给 target 对应属性,其他情况不会对值产生影响。* @return 具体的转换实现*/Class<? extends IConvert> convert() default IConvert.class;}

name 属性

有时候 source 和 target 的字段名称可能不同,只需要通过这个属性,让二者保持一致即可。

ICondition 接口

用于指定赋值是否生效,可以实现目标对象有值就不被覆盖的常见需求。

public interface ICondition {/*** 将原始信息转换为目标信息* @param context 当前执行上下文* @return 转换结果*/boolean condition(final IContext context);}

IContext 上下文接口

其中 IContext 是执行的上下文,便于获取到执行的相关属性。更加灵活的指定和实现我们的功能。

IConvert 字段转化接口

有时候我们希望对字段的值进行处理,比如日期/金额格式化,枚举值显示的处理等等。

就可以借助这个接口,保证代码赋值的优雅性,提升代码的可复用性,更加符合 Open-Close 原则。

/*** <p> 转换接口 </p>* 1. 所有的实现都应该提供默认构造器* <pre> Created: 2019/2/19 10:15 PM  </pre>* <pre> Project: bean-mapping  </pre>** @param <T> 目标泛型* @author houbinbin* @since 0.1.0*/
public interface IConvert<T> {/*** 将原始信息转换为目标信息* @param context 当前执行上下文* @return 转换结果*/T convert(final IContext context);}

拓展阅读

属性复制框架-01-不同名称字段的指定赋值

属性复制框架-02-自定义赋值生效的条件

属性复制框架-03-自定义字段转换实现

java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持相关推荐

  1. java bean 对象属性复制框架BeanMapping-01-入门案例

    项目简介 Bean-Mapping 用于 java 对象属性赋值. 项目中经常需要将一个对象的属性,赋值到另一个对象中. 常见的工具有很多,但都多少不够简洁,要么不够强大. 特性 支持对象属性的浅拷贝 ...

  2. java bean对象属性复制,将一个对象的属性值赋值给另一个对象,对象之间的复制方法

    注意依赖,springframework下的复制顺序为 (目标对象,新对象) import org.springframework.beans.BeanUtils;public static void ...

  3. java遍历一个类的属性名,java遍历对象属性

    java对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态添加属性 java 对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态 ...

  4. Java对象XML序列化框架-Simple2.0

    Java对象XML序列化框架-Simple2.0 Simple是一个XML序列化框架,一个Java 版本宽容的序列化框架,能够快速在Java 平台上开发XML.支持通过annotations完全配置化 ...

  5. 【java】java获取对象属性类型、属性名称、属性值

    java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...

  6. java 将对象属性值快速复制到另一个对象上

    需求:将对象属性值快速复制到另一个对象上,忽略空值属性和id 直接上代码:BeanUtils 工具类 注意:如果需要关注复制性能的话,推荐用插件https://blog.csdn.net/qiaoda ...

  7. java getclass 相等_java使用反射比较两个bean对象属性值是否相等

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import ja ...

  8. mongodb中Gson和java##Bean对象转化类

    此类使用感觉比较繁琐, 每个字段加注解才可以使用, 不如mongoTemplate使用方便, 但如果使用mongo客户端的话, 还是比手动拼接快一点, 所以贴在这儿 package com.iwher ...

  9. Java中对象属性的初始化顺序

    1-对象属性的初始化方式有三种 2-对象属性初始化的顺序 3-类属性初始化方法有两种 4-类属性的访问 在Java中用没有没关键字 static修饰的属性叫对象属性,否则就叫类属性. 1-对象属性的初 ...

最新文章

  1. Yann LeCun专访:我不觉得自己有天分,但是我一直往聪明人堆里钻
  2. 模拟namenode挂掉利用secondary namenode恢复
  3. Windows下安装Objective-C开发环境
  4. SpeedNet: Learning the Speediness in Videos
  5. 日常生活 -- CSDN博客专家
  6. python基金会主席入门教程_Python基金会-文件IO操作,python,基础
  7. linux之shell脚本管理(一)
  8. Java测试类的编写与使用
  9. 使用Outlook对邮件进行分类
  10. 机器视觉硬件之光源选型以及打光技巧
  11. 增量式编码器有哪些分类?增量式编码器是如何工作的?
  12. 异常处理·EF·准备命令定义时发生错误。有关详细信息,请参阅内部异常
  13. 计算机连接打印机用户数量修改,win7系统下局域网如何限制每台打印机的使用成员数量...
  14. 去雾论文A real-time fast defogging system to clear the vision of driver in foggy highway using minimu...
  15. CSS3小可爱亲吻表白特效,给你的五一假期增添点小乐趣
  16. 微信小程序生成小程序码图片-【附坑点】
  17. Android-在app内安装apk
  18. SQL Server 容易忽略的错误
  19. html网页底部弹窗,【HTML】底部弹窗插件代码
  20. 哔哩哔哩html制作搜索,b站如何搜索用户?哔哩哔哩bilibili搜索用户全教程

热门文章

  1. 删除弹框提示_如何关闭Mac的Microsoft AutoUpdate弹框提示
  2. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...
  3. 2019-04-28 Mybatis generator逆向工程生成的Example代码分析
  4. bzoj 1221: [HNOI2001] 软件开发
  5. 移动端去除横向滚动条
  6. knockoutJS学习笔记06:ko数组与模板绑定
  7. c#中使用XSLT将xml文档转换为html文档方法
  8. c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别
  9. OpenCV3.2+VS2013+Tesseract3.02.02配置
  10. c++用WinForm做界面的实现