JAVA 注解的几大作用及使用方法详解
注解(Annotation)
1、Annotation的工作原理:
JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型。该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具组成。
Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响。
Annotation可以从源文件、class文件或者在运行时通过反射机制多种方式被读取。
常见的作用
有以下几种:
1,生成文档。这是最常见的,也是java 最早提供的注解。
  常用的有@see @param @return 等
2,跟踪代码依赖性,实现替代配置文件功能。
  比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都    使用了这种配置来减少配置文件的数量。
3,在编译时进行格式检查。
  如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查    出。
*@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。
*方法的名称就是参数的名称,返回值类型就是参数的类型。
*可以通过default来声明参数的默认值。
父类,接口
Java.lang.annotation
包 java.lang.annotation 中包含所有已定义或自定义注解所需用到的原注解和接口。如接口 java.lang.annotation.Annotation 是所有注解继承的接口,并且是自动继承,不需要定义时指定,类似于所有类都自动继承Object。
该包同时定义了四个元注解;
常见注解
@Override注解:
注释类型 Override
@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
@Override注解表示子类要重写父类的对应方法。
下面是一个使用@Override注解的例子:
class A {
    private String id;
    A(String id){
        this.id = id;
    }
    @Override
    public String toString() {
        return id;
    }
}
@Deprecated注解:
注释类型 Deprecated
@Documented
@Retention(value=RUNTIME)
public @interface Deprecated
@Deprecated注解表示方法是不被建议使用的。
下面是一个使用@Deprecated注解的例子:
class A {
    private String id;
    A(String id){
        this.id = id;
    }
    @Deprecated
    public void execute(){
        System.out.println(id);
    }
    public static void main(String[] args) {
        A a = new A("a123");
        a.execute();
    }
}
@SuppressWarnings注解:
注释类型 SuppressWarnings
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
@Retention(value=SOURCE)
public @interface SuppressWarnings
指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。注意,在给定元素中取消显示的警告集是所有包含元素中取消显示的警告的超集。例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告,那么将在此方法中同时取消显示这两个警告。
下面是一个使用@SuppressWarnings注解的例子:
@SuppressWarnings("unchecked")
public static void main(String[] args) {
    List list = new ArrayList();
    list.add("abc");
}
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。
1,自定义最简单的注解:
public @interface MyAnnotation {
}
使用自定义注解:
public class AnnotationTest2 {
    @MyAnnotation
    public void execute(){
        System.out.println("method");
    }
}
2,添加变量:
public @interface MyAnnotation {
    String value1();
}
使用自定义注解:
public class AnnotationTest2 {
    @MyAnnotation(value1="abc")
    public void execute(){
        System.out.println("method");
    }
}
添加默认值:
public @interface MyAnnotation {
    String value1() default "abc";
}
3、多变量使用枚举:
public @interface MyAnnotation {
    String value1() default "abc";
    MyEnum value2() default MyEnum.Sunny;
}
enum MyEnum{
    Sunny,Rainy
}
使用自定义注解:
public class AnnotationTest2 {
    @MyAnnotation(value1="a", value2=MyEnum.Sunny)
    public void execute(){
        System.out.println("method");
    }
}
4、数组变量:
public @interface MyAnnotation {
    String[] value1() default "abc";
}
使用自定义注解:
public class AnnotationTest2 {
    @MyAnnotation(value1={"a","b"})
    public void execute(){
        System.out.println("method");
    }
}
当注解中使用的属性名为value时,对其赋值时可以不指定属性的名称而直接写上属性值接口;除了value意外的变量名都需要使用name=value的方式赋值。
5、限定注解的使用:
限定注解使用@Target。
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target
指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上:
@Target(ElementType.ANNOTATION_TYPE)
    public @interface MetaAnnotationType {
        ...
    }
此元注释指示该声明类型只可作为复杂注释类型声明中的成员类型使用。它不能直接用于注释:
@Target({})
    public @interface MemberType {
        ...
    }
这是一个编译时错误,它表明一个 ElementType 常量在 Target 注释中出现了不只一次。例如,以下元注释是非法的:
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
    public @interface Bogus {
        ...
    }
public enum ElementType
extends Enum<ElementType>
程序元素类型。此枚举类型的常量提供了 Java 程序中声明的元素的简单分类。
construct用法
这些常量与 Target 元注释类型一起使用,以指定在什么情况下使用注释类型是合法的。
ANNOTATION_TYPE
注释类型声明
CONSTRUCTOR
构造方法声明
FIELD
字段声明(包括枚举常量)
LOCAL_VARIABLE
局部变量声明
METHOD
方法声明
PACKAGE
包声明
PARAMETER
参数声明
TYPE
类、接口(包括注释类型)或枚举声明

注解的使用限定的例子:
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String[] value1() default "abc";
}
元注解
元注解是指注解的注解。包括  @Retention @Target @Document @Inherited四种。
@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括:                @Target(ElementType.TYPE)  //接口、类、枚举、注解

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。