JDK 注解详解

注解用途

  我们在使用spring MVC框架时用到了很多的注解,如:@Controller、@RequestMapping等等,spring框架通过反射获取到标签进行不同的逻辑处理。注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰程序代码的运行,无论是增加还是删除注解,代码都能正常运行。Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过Java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑。

 元注解

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

@Target

@Target主要限定注解的使用范围,通过枚举ElementType定义:

@Retention

@Retention用于描述注解的声明周期,即注解再什么范围内有效。

  SOURCE:注解只存在与java源文件中,编译时会过滤掉;

  CLASS:注解会被编译器编译到class文件中,但是不会被JVM加载;

  RUNTIME:注解会被编译到class文件,并且会被JVM加载,并可以通过反射获取到。 

@Documented

通过@Documented标注的注解可以通过文档工具文档化。

@Inherited

@Inherited是一个标记注解,表明该注解是可以被继承的。如果注解标记在class上,那么它的子类会继承该注解。

但是,实现类并不能继承其接口的注解,覆盖的方法也不能继承其父类方法的注解。

 

自定义注解

注解定义语法:public @interface 注解名 {定义体}

下面通过一个自定义注解看一下:

 

Java使用@interface修饰符来定义注解类,成员声明的限制:

  1)成员已无入参、无抛出异常的方式声明;

  2)可以通过default关键字为成员设置默认值,也可以不设置;

  3)成员类型限制: 

    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)

    2.String类型

    3.Class类型

    4.enum类型

    5.Annotation类型

    6.以上所有类型的数组

 

posted @ 2017-12-26 15:45  两条闲鱼  阅读(539)  评论(0编辑  收藏  举报