注解是Java的一个高级特性,Spring基于注解开发了一套“注解驱动编程”。这听起来很高大上,但毕竟是框架的问题,是不是也可以用好注解呢?确实,我们很少有机会自己写注解,所以我们不知道注解是什么,更不用说用好它们了。本例中,我们将从具体工作入手,开发一个Excel导出功能。相信大家看懂这个例子后,就能明白注解是怎么用的了。Excel导出——需求拆解在后台管理系统中,经常需要将数据导出到Excel表格中。比如双十一之后,销售部需要把产品订单录入Excel表,财务部需要把付款单录入Excel表,然后各个部门汇总分析,最后找个时间讨论如何改进公司的服务。你想想,双十一有几万单,人工录入至少要三四天,而且很容易出错。因此,您必须开发Excel导出功能。那么,怎么做呢?上次我们讲到,注解要发挥作用,有定义、使用、阅读三个要素。本次我们将利用批注的三大特性来实现Excel的导出功能。设计过程是这样的。第一步,我们创建不同的Excel模型。双十一之后,销售部需要订单数据,财务部需要支付数据。两个部门需要的Excel表格一定是不一样的。这就需要为每个部门创建不同的Excel模型来获取他们想要的数据。第二步,我们需要根据Excel模型导出Excel表格。看到这里,你应该明白Excel导出的设计流程了。接下来,我们将一步步实现这个功能。创建Excel模型创建Excel模型涉及注释三个元素的定义和使用。首先定义Excel注解,我们直接看关键代码。@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public@interfaceExcelField{/***导出字段标题*/Stringtitle();/***导出字段排序(升序)*/intsort()default0;/***Alignment(0:automatic;1:left;2:center;3:right)*/intalign()default0;}这里使用了两个元注解@Retention和@Target。@Target表示这个注解只能放在成员变量上;@Retention表示这个注解应该被加载到JVM内存中,我们可以使用反射来读取这个注解。另外,注解还有3个成员变量,分别对应:Excel字段标题、字段排序、对齐方式,方便你对表格进行微调。至此,Excel注解的定义就完成了。接下来使用注解,我们还是直接看代码。publicclassOrderModel{@ExcelField(title="ordernumber",align=2,sort=20)privateStringorderNo;@ExcelField(title="amount",align=2,sort=20)privateStringamount;//创建时间privateDatecreateTime;//省略getter/setter方法}订单模型有3个字段:订单号、金额、创建时间,但这里只给订单号和金额加上注解,表示这两个字段会导出Excel表格,创建时间会被忽略,你可以看看这张图。至此,我们就完成了注解的定义,使用注解,得到了一个Excel模型。但是要实现导出功能,必须按照这个模型生成Excel表格。读取Excel模型读取Excel模型涉及读取注释的三个元素。我们需要读取注释并生成Excel表格,主要分为3步:初始化Excel表格对象—>向Excel表格对象写入数据—>输出文件。第一步是初始化Excel表格对象。在这一步中,我们需要根据Excel模型生成一个Excel表格对象,我们需要创建这些东西:标题,表头,样式等等。让我们看一下代码。publicclassExcelExporter{//...省略无数代码/***********************************************************************************************//***构造函数*@paramtitle表标题,传“空值”,表示没有标题*@paramclsexcel模型对象*/publicExcelExporter(Stringtitle,Class>cls){//获取注解listField[]fs=cls.getDeclaredFields();for(Fieldf:fs){ExcelFieldef=f.getAnnotation(ExcelField.class);if(ef!=null){annotationList.add(newObject[]{ef,f});}}注释列表。sort(comparing(o->((ExcelField)o[0]).sort()));//通过注解获取表格HeaderList
