<强> >强要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。
<人力资源/><强>元注解:强>
元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的元注释类型,它们被用来提供对其它
注释类型作说明.Java5.0定义的元注解:
1。@Target,
2。@Retention,
3。@Documented,
4。@Inherited
这些类型和它们所支持的类在. lang。注释包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。
<强> @Target: 强>
@Target说明了注释所修饰的对象范围:注释可被用于 包、类型(类、接口,枚举,注释类型),类型成员(方法,构造方法,成员变量,枚举值),方法参数和本地变量(如循环变量,抓住参数)。在注释类型的声明中使用了目标可更加明晰其修饰的目标。
<强> 强> <强>作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)强>
<>强取值(应用)有:强>
1。构造函数:用于描述构造器
2。:用于描述域
3。LOCAL_VARIABLE:用于描述局部变量
4。方法:用于描述方法
5。包装:用于描述包
6。参数:用于描述参数
7.类型:用于描述类,接口(包括注解类型)
或枚举声明
使用实例:
@Target (ElementType.TYPE) public @interface Table {,,,/* * ,,,,*,数据表名称注解,默认值为类名称 ,,,,* @return ,,,*/,,,public String 表名(),default “名称”; } @Target (ElementType.FIELD) public @interface NoDBColumn  { }
注表解 可以用于注解类,接口(包括注解类型)或枚举声明,而注解NoDBColumn仅可用于注解类的成员变量。
<人力资源/><强> @Retention: 强>
<强> @Retention 强>定义了该注释被保留的时间长短:某些注释仅出现在源代码中,而被编译器丢弃;而另一些却被编译在类文件中,编译在类文件中的注释可能会被虚拟机忽略,而另一些在类被装载时将被读取(请注意并不影响类的执行,因为注释与类在使用上是被分离的)。使用这个元注释可以对 注释的“生命周期“限制。
<强>作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)强>
<>强取值(RetentionPoicy)有:强>
1。来源:在源文件中有效(即源文件保留)
2。类:在类文件中有效(即类保留)
3。运行时:在运行时有效(即运行时保留)
保留 元注释类型有唯一的价值作为成员,它的取值来自java.lang.annotation。RetentionPolicy的枚举类型值。具体实例如下:
@Target (ElementType.FIELD) @Retention (RetentionPolicy.RUNTIME) public @interface Column  {,,, public String 名字(),default “字段名”,,,,,public String setFuncName (), default “setField”,,,,, public String getFuncName (), default “getField”,, ,,,public boolean defaultDBValue (), default 假; }
列注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理
<人力资源/><强> @Documented: 强>
<强> <强> @ 强> 强>记录用于描述其它类型的注释应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化.Documented是一个标记注解,没有成员。
@Target (ElementType.FIELD) @Retention (RetentionPolicy.RUNTIME) @Documentedpublic @interface Column  {,,, public String 名字(),default “字段名”,,,,,public String setFuncName (), default “setField”,,,,, public String getFuncName (), default “getField”,, ,,,public boolean defaultDBValue (), default 假; }
<强> @Inherited: 强>
<强> 强> @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的注释类型被用于一个类,则这个注释将被用于该阶级的子类。
注意:@Inherited 注释类型是被标注过的类的子类所继承。类并不从它所实现的接口继承注释,方法并不从它所重载的方法继承注释。
当@Inherited 注释类型标注的注释的保留是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用数组去查询一个@Inherited 注释类型的注释时,反射代码检查将展开工作:检查类和其父类,直到发现指定的注释类型被发现,或者到达类继承结构的顶层。