java annotation 学习笔记

来源:互联网 发布:如何找到监控软件 编辑:程序博客网 时间:2024/06/06 12:42

annotation的作用是不用多说的,大家有目共睹。那么我就开始介绍其使用方式。

当前,我们先来熟悉下java的元注解。

元注解:负责注解自定义的注解的注解。java5.0定义了4个标准的元注解

@Target

@Retention

@documented

@Inherited


下面我们挨个详细介绍

@Target

@Target说明了Annotation所修饰的对象的范围:Annotation可被用于packages,types(类,接口,枚举,Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

作用:用于描述注解的使用范围。

取值(ElementType):

CONSTRUCTOR:描述构造器

FIELD:域

LOCAL_VARIABLE:局部变量

METHOD:方法

PACKAGE:包

PARAMETER:参数

TYPE:类、接口、enum

使用实例:

@Target(ElementType.TYPE)

public @interface Table {

//数据表名称注解,默认值是类的名称

//@return

public String tableName() default "className";

}


@Target(ElementType.FIELD)

public @interface NoDBColumn {

//数据列的名称注解,默认值是属性名称

//@return

public String columnName() default "fieldName";

}


注解Table可以用于注解类、接口(包括注解类型)或者enum声明,而注解NoDBcolumn仅可用于注解类的成员变量。


@Retention:

@Retention 定义了该Annotation 被保留的时间长短:

1. 仅出现在源码中,被编译器丢弃,即在编译时就丢弃了。

2. 可以编译到class文件中,编译到class文件中的,  一种是被虚拟机忽略;一种是在装载时读取。(Annotation与class在使用时是被分离的,互不影响)。


作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期.

取值(RetentionPolicy):

SOURCE:在源文件中有效

CLASS:在 class 文件中有效

RUNTIME:在运行时有效

Retention 类型有唯一的value作为成员,它的取值来自java.lang.annotation.RetentionPolicy 的枚举类型。

具体实例:

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface Column {

public  String name() defualt "fieldName";

public String setFuncName() defualt "setField";

public String getFuncName() defualt "getField";

public boolean defualtDBValue() defualt false;

}

Column注解的RetentionPolicy属性值是RUNTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做运行时的逻辑处理。


@Documented是一个标记注解,没有成员。


0 0
原创粉丝点击