Java注解作为一种特殊配置信息,在springboot自动配置中大放异彩。这种配置信息直接与类相关联,即配置发生在使用的地方,显得非常直观。另外,从jdk1.8以后,注解可以重复标记,因此对于一些分组的逻辑控制方便了许多。
最近在项目中有很多通过定长报文与银行交互的场景,这些报文就包含大量的配置信息,比如类型、长度、精度、填充字符等等。结合注解可以重复标记,设计了一个使用注解提供配置信息,创建定长报文的实现。
- 定义配置信息注解类:@DataDefinition
/** * 数据定义标签,当某个属性被多个业务对象所公用时,且数据类型,长度与顺序一致时,只需定义一个标记 * * @author xiangyj * */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Repeatable(DataDefines.class) public @interface DataDefinition { /** * 数据项名称 * * @return */ String name(); /** * 数据项描述 * @return */ String dataDes() default ""; /** * 数据类型 * * @return */ DataType dataType(); /** * 汇总字段标识,方便数据文件转换为pojo逻辑控制 * @return */ boolean isGatherField() default false; /** * 数据长度 * * @return */ int dataLen() default 0; /** * 是否为空 * * @return */ boolean nullable() default false; /** *字段序号,生成文件或解析文件控制排序 * @return */ int order() default 0; /** * 数据集分类 * @return */ RsBusines bus() default RsBusines.B0101; }
其中@Repeatable(DataDefines.class)就是注解重复标记的写法。
-
定义交互数据对象,比如DataInfo
@DataDefinition(name = "Appseriono", dataDes = "交易序列号", dataType = CHARACTER, dataLen = 24, order = 1) protected String appseriono; @DataDefinition(name = "TransType", dataDes = "交易