摘要:只有同時生效時,才會發(fā)生賦值。具體的生效實現(xiàn)類型轉(zhuǎn)換默認(rèn)不進(jìn)行轉(zhuǎn)換為了確保轉(zhuǎn)換的確定性靈活性。對象中指定這個屬性,不會改變對象的屬性值和類型。
BeanMapping
為了更加靈活的指定映射方式,0.0.2 版本引入了 @BeanMapping 注解。
注解的定義注解定義在 bean-mapping-api 模塊中,bean-mapping-core 會默認(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; /** *name 屬性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 { /** * 字段的名稱 * 如果不填,則默認(rèn)使用字段的名稱 * 1. 會將 source 的值賦值給 target 和當(dāng)前 name 屬性一致的對象。 * @return 名稱 */ String name() default ""; /** * 生效條件 * 1. 默認(rèn)為生效 * 2. 當(dāng)放在 source 字段上時,表示是否將值賦給 target 字段 * 當(dāng)放在 target 字段上時,表示是否接受賦值。 * 3. source+target只有同時生效時,才會發(fā)生賦值。 * @return 具體的生效實現(xiàn) */ Class extends ICondition> condition() default ICondition.class; /** * 類型轉(zhuǎn)換 * 1. 默認(rèn)不進(jìn)行轉(zhuǎn)換 * 2. 為了確保轉(zhuǎn)換的確定性+靈活性。對象中指定這個屬性,不會改變對象的屬性值和類型。 * 如果要改變原來的值,那么類型就會被限制的很多,無法足夠的靈活。 * 3. 只有當(dāng) source 的值轉(zhuǎn)換后可以設(shè)置給 target,才會將 source 轉(zhuǎn)換后的值賦值給 target 對應(yīng)屬性,其他情況不會對值產(chǎn)生影響。 * @return 具體的轉(zhuǎn)換實現(xiàn) */ Class extends IConvert> convert() default IConvert.class; }
有時候 source 和 target 的字段名稱可能不同,只需要通過這個屬性,讓二者保持一致即可。
ICondition 接口用于指定賦值是否生效,可以實現(xiàn)目標(biāo)對象有值就不被覆蓋的常見需求。
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)屬性。更加靈活的指定和實現(xiàn)我們的功能。
IConvert 字段轉(zhuǎn)化接口有時候我們希望對字段的值進(jìn)行處理,比如日期/金額格式化,枚舉值顯示的處理等等。
就可以借助這個接口,保證代碼賦值的優(yōu)雅性,提升代碼的可復(fù)用性,更加符合 Open-Close 原則。
/** *拓展閱讀轉(zhuǎn)換接口
* 1. 所有的實現(xiàn)都應(yīng)該提供默認(rèn)構(gòu)造器 *Created: 2019/2/19 10:15 PM*Project: bean-mapping* * @param目標(biāo)泛型 * @author houbinbin * @since 0.1.0 */ public interface IConvert { /** * 將原始信息轉(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)換實現(xiàn)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73442.html
摘要:入門篇學(xué)習(xí)總結(jié)時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個人學(xué)習(xí)源碼:https://git...
摘要:之旅簡化開發(fā)的使命簡化開發(fā)為了降低開發(fā)的復(fù)雜性,采取如下關(guān)鍵策略基于的輕量級和最小侵入性編程通過依賴注入和面向接口實現(xiàn)松耦合基于切面和慣例進(jìn)行聲明式編程通過切面和模版減少樣式代碼依賴注入耦合性具有兩面性一方面,緊密耦合的代碼難以測試難以復(fù) Spring之旅 簡化Java開發(fā) Spring的使命:簡化Java開發(fā) 為了降低Java開發(fā)的復(fù)雜性,采取如下關(guān)鍵策略:基于POJO的輕量級和最...
摘要:使用的好處知乎的回答不用自己組裝,拿來就用。統(tǒng)一配置,便于修改。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 工廠模式理解了沒有? 在刷Spring書籍的時候花了點時間去學(xué)習(xí)了單例模式和工廠模式,總的來說還是非常值得的! 本來想的是刷完《Spring 實戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開發(fā)實戰(zhàn)》...
摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng)。目前最新的版本中模塊的組件已經(jīng)被廢棄掉,同時增加了用于異步響應(yīng)式處理的組件。每一次請求都會產(chǎn)生一個新的,該僅在當(dāng)前內(nèi)有效。顯而易見,這種模式存在很多問題。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://githu...
摘要:關(guān)于依賴注入注入的注解提供的注解不僅僅是對象,還有在構(gòu)造器上,還能用在屬性的方法上。與之相反,的限定符能夠在所有可選的上進(jìn)行縮小范圍的操作,最終能夠達(dá)到只有一個滿足所規(guī)定的限制條件。注解是使用限定符的主要方式。 本文首發(fā)于泊浮目的專欄:https://segmentfault.com/blog... Spring致力于提供一種方法管理你的業(yè)務(wù)對象。在大量Java EE的應(yīng)用中,隨處可...
閱讀 2953·2023-04-25 19:20
閱讀 815·2021-11-24 09:38
閱讀 2067·2021-09-26 09:55
閱讀 2444·2021-09-02 15:11
閱讀 2076·2019-08-30 15:55
閱讀 3622·2019-08-30 15:54
閱讀 3159·2019-08-30 14:03
閱讀 2973·2019-08-29 17:11