java自定义注解

SSH框架包含大量的注解,相信熟知的人或多或少都使用过。java语言中常用的注解我们也经常看到,比如override、SuppressWarnnings等。因为项目需要,很多模块需要导出报表,但是报表的表头不尽相同,那么有没有办法避免硬编码,让表头变得可配呢?

本人不才,曾经尝试用配置文件统一管理表头,实际上,这种方式也未尝不可,相比硬编码还是有很大进步。通过举一反三,我们知道,注解的作用之一就是减少配置文件,为项目瘦身,同样的,表头的配置文件是不是也可以这样处理呢?通过查阅资料并尝试,发现方案可行。


具体实施前,先总结一下注解(Annotation)相关的知识点:

1.注解可以理解为代码的元信息,自带的注解也就是元注解包括@Retention @Target @Document @Inherited四种,具体含义可以自行查阅;

2.JavaSE中内置标准注解包括@Override@Deprecated@SuppressWarnnings三种

3.重点介绍自定注解,具体如下:


3.1定义方式

@Target({FIELD, METHOD}) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Retention(RUNTIME) //定义注解的作用目标**作用范围字段、枚举的常量/方法
public @interface FieldMeta{

     //your content,此处加入自定义注解包含的属性和方法,比如标签、是否可导出、表头顺序等

}


3.2标注方式

定义了注解之后,响应的,会有实体用到注解

@FieldMeta(label="拍摄位置", index=0, exportExcel=true)
    private String tollName = "";//卡口名称


3.3获取方式

最终的目的是要获取可导出的字段,并自动绑定相关的信息,这里用到了java的反射机制,我们知道,java的class,本质上结构是相同的,都包含Field数组和Method数组,我们可以通过反射机制去动态获取class的这些信息

Field[] field = tempClass.getDeclaredFields();

FieldMeta fmeta = field[i].getAnnotation(FieldMeta.class);

通过fmeta.index() 和 fmeta.label()获取相关信息即可


以上提供的是整体思路,具体还是亲自尝试吧


你可能感兴趣的:(java,注解)