java注解

注解包含元注解和自定义注解

元注解:

元注解的作用就是负责注解其他注解。java提供了4个标准的meta-annotation类型,它们用来提供对其它annotation类型作说明:

1  @Target

2  @Retention

3  @Documented

4  @Inherited

@Target:

说明Annotation所修饰的对象范围:可用于packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量。

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

取值(ElementType)有:

1.CONSTRUCTOR:用于描述构造器

2.FILED:用于描述域

3.LOCL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Target(ElementType.TYPE)
public @interface Table {
    /**
     * 数据表名称注解,默认值为类名称
     * @return
     */
    public String tableName() default "className";
}

@Target(ElementType.FIELD)
public @interface NoDBColumn {

}

@注解Table可以用于注解类、接口或ENUM声明,而注解NoDBColumn仅可以注解类的成员变量

@Retention:

定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些缺被编译在class中,编译在class中的Annotation可能会被虚拟机忽略,而另一些在class被装载时被读取。使用这个元注解可以对Annotation“生命周期”限制。

作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

取值(RetentionPolicy)有:

1  SOURCE:在源文件中有效(即源文件保留)

2  CLASS:在class文件中有效(即CLASS保留)

3  RUNTIME:在运行时有效(即运行时保留)

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    public String name() default "fieldName";
    public String setFuncName() default "setField";
    public String getFuncName() default "getField"; 
    public boolean defaultDBValue() default false;
}板 

Colum注解的RetentionPolicy是RUNTIME,这样处理器可以通过反射,获取到该注解的属性值,进行一些运算逻辑处理。

@Documented:

用于描述其它类型的注解应该被作为被标注的程序成员的公共API,可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
    public String name() default "fieldName";
    public String setFuncName() default "setField";
    public String getFuncName() default "getField"; 
    public boolean defaultDBValue() default false;
}

@Inherited:

是一个标记注解,阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

/**
 * 
 * @author peida
 *
 */
@Inherited
public @interface Greeting {
    public enum FontColor{ BULE,RED,GREEN};
    String name();
    FontColor fontColor() default FontColor.GREEN;
}

自定义注解@interface

格式:

public @interface 注解名 {定义体}

 

posted @ 2016-05-24 09:28  -S-  阅读(180)  评论(0编辑  收藏  举报