资讯专栏INFORMATION COLUMN

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

leap_frog / 1260人阅读

摘要:只有同时生效时,才会发生赋值。具体的生效实现类型转换默认不进行转换为了确保转换的确定性灵活性。对象中指定这个属性,不会改变对象的属性值和类型。

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;

/**
 * 

BeanMapping 注解

* *
 Created: 2019/2/19 10:11 PM  
*
 Project: bean-mapping  
* * @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 condition() default ICondition.class; /** * 类型转换 * 1. 默认不进行转换 * 2. 为了确保转换的确定性+灵活性。对象中指定这个属性,不会改变对象的属性值和类型。 * 如果要改变原来的值,那么类型就会被限制的很多,无法足够的灵活。 * 3. 只有当 source 的值转换后可以设置给 target,才会将 source 转换后的值赋值给 target 对应属性,其他情况不会对值产生影响。 * @return 具体的转换实现 */ Class convert() default IConvert.class; }
name 属性

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

ICondition 接口

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

public interface ICondition {

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

}
IContext 上下文接口

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

IConvert 字段转化接口

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

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

/**
 * 

转换接口

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73442.html

相关文章

  • 慕课网_《Spring入门篇》学习总结

    摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...

    Ververica 评论0 收藏0
  • Spring之旅 - 3.0、3.1、4.0导引

    摘要:之旅简化开发的使命简化开发为了降低开发的复杂性,采取如下关键策略基于的轻量级和最小侵入性编程通过依赖注入和面向接口实现松耦合基于切面和惯例进行声明式编程通过切面和模版减少样式代码依赖注入耦合性具有两面性一方面,紧密耦合的代码难以测试难以复 Spring之旅 简化Java开发 Spring的使命:简化Java开发 为了降低Java开发的复杂性,采取如下关键策略:基于POJO的轻量级和最...

    leon 评论0 收藏0
  • Spring IOC知识点一网打尽!

    摘要:使用的好处知乎的回答不用自己组装,拿来就用。统一配置,便于修改。 前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工厂模式,总的来说还是非常值得的! 本来想的是刷完《Spring 实战 (第4版)》和《精通Spring4.x 企业应用开发实战》...

    djfml 评论0 收藏0
  • 15个经典的Spring面试常见问题

    摘要:我自己总结的学习的系统知识点以及面试问题,已经开源,目前已经。目前最新的版本中模块的组件已经被废弃掉,同时增加了用于异步响应式处理的组件。每一次请求都会产生一个新的,该仅在当前内有效。显而易见,这种模式存在很多问题。 我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://githu...

    sarva 评论0 收藏0
  • 看起来很长但还是有用的Spring学习笔记

    摘要:关于依赖注入注入的注解提供的注解不仅仅是对象,还有在构造器上,还能用在属性的方法上。与之相反,的限定符能够在所有可选的上进行缩小范围的操作,最终能够达到只有一个满足所规定的限制条件。注解是使用限定符的主要方式。 本文首发于泊浮目的专栏:https://segmentfault.com/blog... Spring致力于提供一种方法管理你的业务对象。在大量Java EE的应用中,随处可...

    DTeam 评论0 收藏0

发表评论

0条评论

leap_frog

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<