java bean 對象屬性複製框架BeanMapping-release_0.0.2-註解支持

BeanMapping

爲了更加靈活的指定映射方式,0.0.2 版本引入了 @BeanMapping 註解。java

註解的定義

註解定義在 bean-mapping-api 模塊中,bean-mapping-core 會默認引入此模塊。git

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 的字段名稱可能不一樣,只須要經過這個屬性,讓兩者保持一致便可。github

ICondition 接口

用於指定賦值是否生效,能夠實現目標對象有值就不被覆蓋的常見需求。api

public interface ICondition {

    /** * 將原始信息轉換爲目標信息 * @param context 當前執行上下文 * @return 轉換結果 */
    boolean condition(final IContext context);

}
複製代碼

IContext 上下文接口

其中 IContext 是執行的上下文,便於獲取到執行的相關屬性。更加靈活的指定和實現咱們的功能。app

IConvert 字段轉化接口

有時候咱們但願對字段的值進行處理,好比日期/金額格式化,枚舉值顯示的處理等等。框架

就能夠藉助這個接口,保證代碼賦值的優雅性,提高代碼的可複用性,更加符合 Open-Close 原則。spa

/** * <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-不一樣名稱字段的指定賦值code

屬性複製框架-02-自定義賦值生效的條件對象

屬性複製框架-03-自定義字段轉換實現blog

相關文章
相關標籤/搜索