摘要:只有同時生效時,才會發生賦值。具體的生效實現類型轉換默認不進行轉換為了確保轉換的確定性靈活性。對象中指定這個屬性,不會改變對象的屬性值和類型。
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; /** *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 { /** * 字段的名稱 * 如果不填,則默認使用字段的名稱 * 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; }
有時候 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-自定義字段轉換實現
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73442.html
摘要:入門篇學習總結時間年月日星期三說明本文部分內容均來自慕課網。主要的功能是日志記錄,性能統計,安全控制,事務處理,異常處理等等。 《Spring入門篇》學習總結 時間:2017年1月18日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...
摘要:之旅簡化開發的使命簡化開發為了降低開發的復雜性,采取如下關鍵策略基于的輕量級和最小侵入性編程通過依賴注入和面向接口實現松耦合基于切面和慣例進行聲明式編程通過切面和模版減少樣式代碼依賴注入耦合性具有兩面性一方面,緊密耦合的代碼難以測試難以復 Spring之旅 簡化Java開發 Spring的使命:簡化Java開發 為了降低Java開發的復雜性,采取如下關鍵策略:基于POJO的輕量級和最...
摘要:使用的好處知乎的回答不用自己組裝,拿來就用。統一配置,便于修改。 前言 只有光頭才能變強 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 工廠模式理解了沒有? 在刷Spring書籍的時候花了點時間去學習了單例模式和工廠模式,總的來說還是非常值得的! 本來想的是刷完《Spring 實戰 (第4版)》和《精通Spring4.x 企業應用開發實戰》...
摘要:我自己總結的學習的系統知識點以及面試問題,已經開源,目前已經。目前最新的版本中模塊的組件已經被廢棄掉,同時增加了用于異步響應式處理的組件。每一次請求都會產生一個新的,該僅在當前內有效。顯而易見,這種模式存在很多問題。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://githu...
摘要:關于依賴注入注入的注解提供的注解不僅僅是對象,還有在構造器上,還能用在屬性的方法上。與之相反,的限定符能夠在所有可選的上進行縮小范圍的操作,最終能夠達到只有一個滿足所規定的限制條件。注解是使用限定符的主要方式。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... Spring致力于提供一種方法管理你的業務對象。在大量Java EE的應用中,隨處可...
閱讀 2943·2023-04-25 19:20
閱讀 786·2021-11-24 09:38
閱讀 2040·2021-09-26 09:55
閱讀 2430·2021-09-02 15:11
閱讀 2015·2019-08-30 15:55
閱讀 3610·2019-08-30 15:54
閱讀 3148·2019-08-30 14:03
閱讀 2962·2019-08-29 17:11