Java:深入理解注解(注释)自定义注解入门

  

<强> 强要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解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   注释类型的注释时,反射代码检查将展开工作:检查类和其父类,直到发现指定的注释类型被发现,或者到达类继承结构的顶层。

Java:深入理解注解(注释)自定义注解入门