java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持
生活随笔
收集整理的這篇文章主要介紹了
java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
BeanMapping
為了更加靈活的指定映射方式,0.0.2 版本引入了 @BeanMapping 注解。
注解的定義
注解定義在 bean-mapping-api 模塊中,bean-mapping-core 會(huì)默認(rèn)引入此模塊。
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 {/*** 字段的名稱* 如果不填,則默認(rèn)使用字段的名稱* 1. 會(huì)將 source 的值賦值給 target 和當(dāng)前 name 屬性一致的對(duì)象。* @return 名稱*/String name() default "";/*** 生效條件* 1. 默認(rèn)為生效* 2. 當(dāng)放在 source 字段上時(shí),表示是否將值賦給 target 字段* 當(dāng)放在 target 字段上時(shí),表示是否接受賦值。* 3. source+target只有同時(shí)生效時(shí),才會(huì)發(fā)生賦值。* @return 具體的生效實(shí)現(xiàn)*/Class<? extends ICondition> condition() default ICondition.class;/*** 類型轉(zhuǎn)換* 1. 默認(rèn)不進(jìn)行轉(zhuǎn)換* 2. 為了確保轉(zhuǎn)換的確定性+靈活性。對(duì)象中指定這個(gè)屬性,不會(huì)改變對(duì)象的屬性值和類型。* 如果要改變?cè)瓉淼闹?#xff0c;那么類型就會(huì)被限制的很多,無(wú)法足夠的靈活。* 3. 只有當(dāng) source 的值轉(zhuǎn)換后可以設(shè)置給 target,才會(huì)將 source 轉(zhuǎn)換后的值賦值給 target 對(duì)應(yīng)屬性,其他情況不會(huì)對(duì)值產(chǎn)生影響。* @return 具體的轉(zhuǎn)換實(shí)現(xiàn)*/Class<? extends IConvert> convert() default IConvert.class;}name 屬性
有時(shí)候 source 和 target 的字段名稱可能不同,只需要通過這個(gè)屬性,讓二者保持一致即可。
ICondition 接口
用于指定賦值是否生效,可以實(shí)現(xiàn)目標(biāo)對(duì)象有值就不被覆蓋的常見需求。
public interface ICondition {/*** 將原始信息轉(zhuǎn)換為目標(biāo)信息* @param context 當(dāng)前執(zhí)行上下文* @return 轉(zhuǎn)換結(jié)果*/boolean condition(final IContext context);}IContext 上下文接口
其中 IContext 是執(zhí)行的上下文,便于獲取到執(zhí)行的相關(guān)屬性。更加靈活的指定和實(shí)現(xiàn)我們的功能。
IConvert 字段轉(zhuǎn)化接口
有時(shí)候我們希望對(duì)字段的值進(jìn)行處理,比如日期/金額格式化,枚舉值顯示的處理等等。
就可以借助這個(gè)接口,保證代碼賦值的優(yōu)雅性,提升代碼的可復(fù)用性,更加符合 Open-Close 原則。
/*** <p> 轉(zhuǎn)換接口 </p>* 1. 所有的實(shí)現(xiàn)都應(yīng)該提供默認(rèn)構(gòu)造器* <pre> Created: 2019/2/19 10:15 PM </pre>* <pre> Project: bean-mapping </pre>** @param <T> 目標(biāo)泛型* @author houbinbin* @since 0.1.0*/ public interface IConvert<T> {/*** 將原始信息轉(zhuǎn)換為目標(biāo)信息* @param context 當(dāng)前執(zhí)行上下文* @return 轉(zhuǎn)換結(jié)果*/T convert(final IContext context);}拓展閱讀
屬性復(fù)制框架-01-不同名稱字段的指定賦值
屬性復(fù)制框架-02-自定義賦值生效的條件
屬性復(fù)制框架-03-自定義字段轉(zhuǎn)換實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: All in L4”的自动驾驶公司:Au
- 下一篇: koa2入门(3)mongoose 增删