美文网首页
JavaSE进阶-注解:JavaSE元注解和JavaEE原生注解

JavaSE进阶-注解:JavaSE元注解和JavaEE原生注解

作者: kkyeer | 来源:发表于2019-04-13 22:54 被阅读0次

JavaSE元注解

在注解定义时,用在注解头部的注解,称为元注解,目前元注解在java.lang.annotation包内,分别@Target,@Retention,@Documented,@Inherited,@Repeatable,@Native

@Documented

当一个注解上面有此注解时,使用此注解的方法等在生成Doc时,Doc中会包含此注解,举例如下

实验用注解:

@Documented
@Target(ElementType.TYPE)
@interface Version {
    String value();
}

测试类:

@Version("1.0")
public class TestCase {

}

生成的文档中

taste.annotations.meta.documented
类 TestCase

java.lang.Object
    taste.annotations.meta.documented.TestCase 


@Version(value="1.0")  <<注解会被包含在文档中
public class TestCase
extends java.lang.Object

@Inherited

注解被用在类声明上时,可以使用此注解,被这类注解修饰的类,子类与父类有相同的注解
比如

@Inherited @interface Persistent { }
@Persistent class Employee { . . . }
class Manager extends Employee { . . . } // <==这个类,也有Persitent注解

类Manager同样有@Persistent注解,也即一个类是可持久化的,那他的子类也是可持久化的,类似的例子还有@Serializable,但由于这个特性是在JDK1.1推出的,早于注解出现前,因此没有用注解的形式

@Repeatable

注解被指定为@Repeatable时,注解可以在同一个位置多次实现,但定义此注解时,需要同时定义一个容器注解,来包括重复的注解类,

知识要点

  1. 容器注解必须有一个名为value,类型为包裹注解数组的变量,且其他变量必须有默认值
  2. 获取注解时,若注解确实是多次定义,则调用getAnnotation(.class)方法返回null,实际使用时,若需处理可重复注解,请使用getDeclaredAnnotationsByType(.class)方法,返回的是对应注解实例的数组

举例:

定义可重复注解:

@Repeatable(InfoArray.class)
@Retention(RetentionPolicy.RUNTIME)
@interface Info {
    String value();
}

定义包裹的注解

@Retention(RetentionPolicy.RUNTIME)
@interface InfoArray {
    Info[] value();
    String desc() default "a";
}

使用注解:

@Info("Created by kk")
@Info("On 2019/4/13")
public class TestCase {    
}

获取注解:

    public static void main(String[] args) {
        Class<TestCase> testCaseClass = TestCase.class;
        Info infoAnnotation = testCaseClass.getAnnotation(Info.class);
        System.out.println(infoAnnotation);

        Info[] infoArray = testCaseClass.getDeclaredAnnotationsByType(Info.class);
        for (Info info : infoArray) {
            System.out.println(info.value());
        }
    }

输出

null
Created by kk
On 2019/4/13

JavaEE原生注解

@SuppressWarnings("unchecked")

忽略某些Warning

@Override

表明某方法是复写父类方法

@Generated

表明此代码为自动生成,用来给IDE提供标识以隐藏默写代码,或者给代码生成工具提供标识以替换,有三个Field,典型用法:

@Generated(value = "com.kkyeer.taste",date = "2019-01-04T12:00:00",comment = "some comment")

@PostConstruct和PreDestroy

分别注解在实例初始化后和销毁前执行的方法
注意,这两个注解本身并不提供这两个功能,需要配合相关框架或者处理类才能发挥效果

@Resource

表明注解的变量由容器注入

相关文章

  • JavaSE进阶-注解:JavaSE元注解和JavaEE原生注解

    JavaSE元注解 在注解定义时,用在注解头部的注解,称为元注解,目前元注解在java.lang.annotati...

  • Java注解

    JavaSe5开始内置了三种注解,定义在Java.lang中 另外还有四种元注解 一般来说用到注解的地方很大可能会...

  • Java基础_注解

    理解 注解就是标签 这里先不引出概念 具体描述 注解是在JavaSE 5.0版本引入的一个概念 注解的定义 使用@...

  • JavaSE 注解——Annotation

    1. 学习背景 因为现在很多框架都几乎用到了注解,而使用传统xml进行配置的情况已经逐渐成为了过去,但是仅仅会使用...

  • [JAVA基础篇25]—反射读取枚举值上的注解信息

    JAVASE 的API并没有提供获取枚举值注解信息的方法,只能获取到enum类上的注解,但是有一种场景:通过注解为...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • Java-Java注解(Annotation)

    一.内置注解 1.元注解(用于修饰注解定义) 2.原生注解 二.自定义注解(例) 1.定义注解 2.使用注解 3....

  • JavaSE进阶-注解:基础与定义

    1. 注解基础理解 注解是一类特殊的类,在类声明、方法声明、参数列表等位置添加注解,并结合代理等设计模式,可以提高...

  • Android进阶之自定义注解

    Android进阶之自定义注解 本篇文章内容包括: 注解的概念 元注解 自定义注解 Android自定义编译时注解...

  • JAVA中注解的实现原理

    在JAVASE中的注解有3个它们分别是:@Overried 重写,@Deprecated 不建议使用,@Suppe...

网友评论

      本文标题:JavaSE进阶-注解:JavaSE元注解和JavaEE原生注解

      本文链接:https://www.haomeiwen.com/subject/bpsdwqtx.html