使用自定义的Annotation&默认值

整篇文章都比较抽象,项目用到了上百张excel模板,并且基于这些模板做数据采集、输出。单次导出文件的大小,平均是8G。性能要求较高。只能自己做一个工具,封装底层实现。

这篇文章,只是解决的一个小模块。因为百度、google都没有找到案例,所以,特别记录下

1      场景描述

自定义的Annotation如何使用?如果不设定默认值,那么所有的属性都需要声明,怎么设定默认值?

2      自定义Annotation

Write/Read Excel时,使用注解建立model、Excel模板、数据(数据库)之间的关系


为了简化问题,只考虑前两个节点,且,只考虑write。后面的内容都省略。

 

第一种情况,由于不需要填充数据,所以,也没必要建模,直接通过annotation,交由工具创建即可。

第二种情况,需要建模,具体的注解,要在模型上标注。

所以,只有第一种情况需要在annotation里直接声明。

2.1   Module

 

/**
 * 一个业务模块,包含多张视图View<br/>
 * 这些视图都在同一个文件夹里,不考虑Path
 * @author Yuri
 *
 */
public @interface Module {
	String id();
	String name();
	View[] srcView() default {};

}

2.2   View

 

/**
 * write时的视图。<br/>
 * 逻辑上对应一个Excel,包含完整的业务逻辑。<br/>
 * 如果数据量较大,需要拆分workbook/sheet,那么,view就特指理论上的一个Excel,不存在实体。<br/>
 * 在回读Excel时,怎么确定sheet对应于模板中的哪一个?隐藏单元格?标题?sheet name?<br/>
 * 都有缺陷,作为一个实际的功能,需要强制约束!<br/>
 * 单独创建一个sheet“参数表”,将sheet id/name/标题等信息记录下来,回读时,根据参数表,即可确定对应的sheet<br/>
 * write批次等数据也可以放在参数表里
 * 
 * @author Yuri
 *
 */
public @interface View {
	String id();
	/**
	 * excel name
	 * @return
	 */
	String name();
	/**
	 * 原表
	 * @return
	 */
	//Sheet[] srcSheet() default {};
	/**
	 * 顺序<br/>
	 * 虽然,windows下,文件默认是按照名称排序的。但,显示在界面上(项目),这些文件名,肯定是有顺序的
	 * @return
	 */
	int order();
}

2.3   默认值

基础类型Integer/String/Class…的默认值在网上有示例,略

自定义类型的默认值,有两种写法:

 

两种写法都有缺陷,但后者,实际上并不能确定view的值,这种注解,本身就是错误的。

推荐使用第一种写法,

3      使用Annotation

 

@Module(id="001",name="001",srcView={@View(id="excel001",name="excel001",order=1),
		@View(id="excel002",name="excel002",order=2)})
public class MyModule {
	
}

当然,annotation,还有作用域、生命周期、是否可继承等。在示例里,都忽略了。

4      附录--解析Annotation

解析annotation可以借鉴lombok,直接在项目编译时,修改class;也可以通过反射读取设置的annotation。

推荐,使用后者。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值