咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

背景

由于分配的开发任务中,有8个地方需要Excel导出功能,我们来看看公司目前的导出技术,由于隐私原因,有些地方会有打码。

首先需要写一个properties文件,文件的key对应实体字段名,value就是对应的Excel表格列名称。如下图:

然后获取要导出的数据,再将数据写入到Excel表格中。如下图:

每次导出都要写一个xSSFWorkbookHandler()方法。

每次开发导出功能都要这么写,我觉得好麻烦。

于是我开始思考,每次都要创建properties文件,还要写一个xSSFWorkbookHandler(),太过繁琐。在我看来,只有获取导出的数据是业务开发人员需要关心的。其他操作不需要业务开发人员操心。

我何不把导出做成注解的形式,把创建properties文件(不一定需要创建文件),和写xSSFWorkbookHandler()整合进增强方法中。说干就干,经过一系列操作,终于大功告成。下面我们先来看看成果。

成果展示

首先在要导出的方法上添加@ExportExcel(beanClass = Member.class)注解,beanClass的值为导出的实体类class,这里为Member.class。

然后在要导出的实体类里面给要导出的字段加上@ExportFiled注解。其中number为Excel中列名的自定义顺序,name为Excel中的列名。

导出测试

下面是导出的Excel

下面我将介绍我的注解开发过程。

自定义导出注解

编写ExportExcel注解

/** * Description: 导出Excel * * @author Lvshen * @version 1.0 * @date: 2020-8-31 15:02 * @since JDK 1.8 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ExportExcel { /** * 需要导出的实体class */ Class beanClass(); }

编写ExportFiled注解

/** * Description: 导出字段注解 * * @author Lvshen * @version 1.0 * @date: 2020-8-31 15:04 * @since JDK 1.8 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ExportFiled { /** * 导出字段顺序 */ String number(); /** * 导出字段名称 */ String name(); }

采用Spring AOP进行方法增强

创建切面类

@Component @Aspect @Slf4j public class ExportAspect { ... }

定义横切面

@Pointcut("@annotation(com.lvshen.demo.annotation.export.ExportExcel)") public void exportPointcut() { }

给被注解的方法增强功能

@Around("exportPointcut()") public void doExport(ProceedingJoinPoint point) throws Throwable { Object o = point.proceed(); if (o instanceof List) { List list = (List) o; MethodSignature signature = (MethodSignature) point.getSignature(); Method method; method = point.getTarget().getClass().getMethod(signature.getName(), signature.getMethod().getParameterTypes()); ExportExcel annotation = method.getAnnotation(ExportExcel.class); //1.获取ExportExcel注解上beanClass的值 Class aClass = annotation.beanClass(); Object[] args = point.getArgs(); //2.获取方法第一个参数值 HttpServletResponse response = (HttpServletResponse) args[0]; exportUtils(response, list, aClass); } }

这里我们做几件事:

1.执行被注解的方法,获取返回值,这里我们约定为List集合。

2.获取ExportExcel注解上beanClass的值。

3.获取方法第一个参数,即HttpServletResponse。

4.调用exportUtils()方法生成Excel。

下面我们来看看exportUtils()方法

由于内容较多,我将代码转成图片了。如果对上述代码中涉及的自定义注解技术和AOP技术不太了解,可以自行上网了解一下,这里不作过多讲解。

如果你对文中的导出功能感兴趣,可以去Github阅读注解导出源代码,地址为:

https://github.com/lvshen9/demo/tree/lvshen-dev/src/main/java/com/lvshen/demo/annotation/export

欢迎下载。