Java自定义注解

一、注解:

我们可以通过定义注解,使用注解来方便地调用某些数据。

二、java内建注解:

比如@override、@deprecated等,重写方法时会使用@override,而当某些类或方法已经被摒弃时则会出现 @deprecated

三、元注解:

元注解的作用就是负责注解其他注解。

包括@Target、@Inherited、@Retention、@Documented

@Target:表明Annotation的使用范围,包括类、方法、属性等
@Inherited:表明父类的注解可以被子类继承
@Retention:指定Annation的存在范围
@Documented:在生成java doc时可以写入文档说明

其中,Target范围如下:

而Retention范围如下:

 

四、自定义Annotation
Annotation用@interface来定义.
格式如下:

public @interface Annotation  名称{
    修饰符  数据类型 变量名称();
}

也可以在定义时直接用default指定默认值。

 

五、解析Annotation

而想取得Annotation的值,需要使用反射机制。

解析Annotation的相关api如下所示:

示例如下:

MyAnnotation.java :

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Inherited
@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})    //表示该注解,既可以用到字段上,也可以用到类上面。 @Documented
public @interface MyAnnotation { public String name(); public String job() default "programer"; }

Person.java :

@MyAnnotation(name = "lin")
public class Person {
  //getter 、 setter }

AnnotationTest.java :

/**
    通过反射获取Annotations的值
 */
public class AnnotationTest {
    public static void main(String[] args) throws Exception {
        Class<?> personClass=Person.class;
     //判断Person类上面,有没有MyAnnotation.class这个注解
        if(personClass.isAnnotationPresent(MyAnnotation.class)) {
       //获取注解
            MyAnnotation annotation=personClass.getAnnotation(MyAnnotation.class);
            String name=annotation.name();
            String job=annotation.job();
            System.out.println("name:"+name);
            System.out.println("job:"+job);
        } } }

 

参考资料:

《java开发实战经典》

posted on 2017-05-18 11:32  乐之者v  阅读(289)  评论(0编辑  收藏  举报

导航