Java注解(Annotation)详解
2017-04-21 15:46
585 查看
Java注解(Annotation)详解
对于Java开发的同学来说,注解(Annotation)应该是一个非常熟悉的语法,在开发的过程中,我们经常会用到注解,通过注解也让我们的开发变得更加简化;这里我们就来深入浅出的说一下Java中的这个特别重要的特性:注解(Annotation)注解的介绍(Annotation)
注解是JDK 5.0版本引如的,源码作者Jaoshua Bloch注解的作用是修饰编程元素(编程元素:包、类、方法、构造方法、成员变量等程序组成部分),提供了一种安全的类似于注释的机制,将信息或元数据与编程元素进行关联。
生成文档。这是最常见的,也是Java 最早提供的注解。常用的有@see @param @return 等 ;
跟踪代码依赖性,实现替代配置文件功能。例如SpringBoot 中大量基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;
在代码编译时进行格式检查或代码运行时进行配置信息的设置。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
注解的语法与组成
元注解
@Document:定义该注解是否生成到当前文件的JavaDoc中@Retention:定义该注解的生命周期
@Target:注解修饰的编程元素
@Inherited:是否允许子类继承父类的注解
元注解的取值范围
@Retention取值 | 含义 |
---|---|
RetentionPolicy.SOURCE | 只存在于.java文件中,例如:@Override |
RetentionPolicy.CLASS | 存在于.class文件中,编译阶段存在,类加载的时候丢弃,Java默认的就是这种取值 |
RetentionPolicy.RUNTIME | 始终不会丢弃,运行期也会保留该注解,可以使用反射机制读取该注解的信息,例如:@Documented |
取值 | 含义 |
---|---|
ElementType.TYPE | 类、接口、注解或者枚举 |
ElementType.FIELD | field属性或者枚举常量 |
ElementType.METHOD | 方法声明上 |
ElementType.PARAMETER | 参数 |
ElementType.CONSTRUCTOR | 构造方法 |
ElementType.LOCAL_VARIABLE | 局部变量 |
ElementType.ANNOTATION_TYPE | 注解上使用 |
ElementType.PACKAGE | 描述包 |
注解的语法和定义形式
注解以@interface关键字定义注解中可包含成员,成员以无参数的方法形式被声明,方法名是该成员的名称,返回类型是该成员的类型
注解的成员赋值是通过@Annotation(name=value)来进行的
注解需要标明注解的生命周期(@Retention)和修饰编程元素(@Target)以及是否在JavaDoc中生成(@Documented)和是否被子类继承注解(@Inherited) ,这些信息通过元注解来进行实现
自定义注解
package _20170419;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Table {
String name() default "";
}
代码分析
@Target(ElementType.TYPE)
表示该注解可作用于类,接口,注解或者枚举中
@Retention(RetentionPolicy.RUNTIME)
表示该注解在运行时保留,永不丢弃,可以通过反射来获取注解中的成员值
@Inherited
表示该注解会被子类继承
@Documented
表示该注解会生成到当前文件的JavaDoc中
@interface Table
表示该注解名称为Table
String name() default “”;
表示该注解的成员名称为name,name的类型为String
获取注解的值
package _20170419;
import org.junit.Test;
@Table()
public class TableTest {
@Test
public void validTableAnnotation(){
System.out.println(“开始注解过程”);
TableTest tableTest = new TableTest();
if (TableTest.class.isAnnotationPresent(Table.class)) { Table table = TableTest.class.getAnnotation(Table.class); System.out.println("name:"+table.name()); }
}
}
相关文章推荐
- 基于Java 注解(Annotation)的基本概念详解
- Java中的Annotation详解和使用 自定义注解
- Java:元注解(Meta-Annotation)详解
- Java注解(Annotation)详解(二)——自定义注解
- 1009--Java自定义注解 Annotation详解
- Java Annotation自定义注解详解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解(Annotation)详解(一)——概述及JDK自带注解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解(Annotation)详解
- Java注解Annotation详解
- Java注解之Annotation详解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解Annotation详解
- Java注解Annotation详解