自定义注解
网上博客千百篇·····
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface EnableExport {
String value() default "该类可以导出为excel";
}
@Target 该注解可以被贴在哪里(字段、方法、类等)常量ElementType.TYPE表示可以被贴在类上
@Retention 该注解的生命周期
EnableExport 注解名称
String value() 表示该注解有一个值value,默认值为“XXX”
使用
通过反射获取被贴了注解的字段信息
本文用到的反射方法
//获取class文件
Class claz=User.class;
Class claz=new User().getClass();
//获取类中所有的字段信息
Field[] fields=claz.getDeclaredFields();
//获取某个字段的值
Object obj=fields[0].get(user);//获取字段值一定要有对象
//设置字段可以操作,如果字段为private,则不能进行获取值的操作
fields[0].setAccessible(true);
//判断该字段是否贴了某个注解
Boolean b=fields[0].isAnnotationPresent(注解的字节码);
上代码:
public void makeWorkBook(Map<String, Object> model, Workbook workbook) {
String sheetName;
List<T> pojoList = (List<T>) model.get("list");
if (claz.isAnnotationPresent(EnableExport.class)) {
EnableExport enableExport = (EnableExport) claz.getAnnotation(EnableExport.class);
sheetName = enableExport.value();
} else {
sheetName = "未定义名称";
}
Sheet sheet = workbook.createSheet(sheetName);
Row title = sheet.createRow(0);
Field[] fields = claz.getDeclaredFields();
//创建第一行:标题行
for (int i = 0, j = 0; i < fields.length; i++) {
if (fields[i].isAnnotationPresent(ExportName.class)) {
title.createCell(j).setCellValue(fields[i].getAnnotation(ExportName.class).value());
j++;
}
}
//创建数据行
for (int i = 0; i < pojoList.size(); i++) {
int j = 0;
//创建一行
Row dataRow = sheet.createRow(i + 1);
//创建单元格并填充数据
for (int n = 0; n < fields.length; n++) {
if (fields[n].isAnnotationPresent(ExportName.class)) {
//存在该注解,创建单元格并写入值
try {
fields[n].setAccessible(true);
dataRow.createCell(j).setCellValue(String.valueOf(fields[n].get(pojoList.get(i))));
j++;
} catch (Exception e) {
throw new RuntimeException("创建单元格错误,错误原因:" + e.getMessage());
}
}
}
}
本文可以结合我的另一篇博客看
springMvc导出excel