首页 > 代码库 > Java注解

Java注解

一、注解的分类:

1、按照运行机制分:

1)、源码注解:只在源码中存在,.java文件中

2)、编译时注解:在源码和.class文件中都存在 如:@Override @Deprecated @Suppvisewarnings

3)、运行时注解:在运行阶段起作用,会影响运行逻辑的注解 如:@Autowired

 

2、按照来源分:

1)、来自JDK的注解

2)、来自第三方的注解

3)、我们自己定义的注解

 

3、元注解:

注解的注解

 

二、自定义注解

1、使用@interface关键字定义注解

2、成员以无参数无异常方式声明

3、可以用default为成员指定一个默认值

4、成员的类型只能是基本类型、String、Class、Annotation、Enumeration

5、如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)

6、注解类可以没有成员,没有成员的注解成为标示注解

 

@Target({ElementType.METHOD,ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Inherited

@Documented

public @interface Description{

  String desc();

  String author();

  int age() default 18;

}

 

三、元注解

1)、@Target: 注解的作用域

构造方法声明 CONSTRUCTOR、

字段声明FIELD、

局部变量声明LOCAL_VARIABLE、

方法声明METHOD、

包声明PACKAGE、

注解类型声明ANNOTATION_TYPE、

参数声明PARAMETER、

类接口声明TYPE

2)、@Retention:生命周期

SOURCE只在源码显示,编译时会丢弃

CLASS编译时会记录到class中,运行时忽略

RUNTIME运行时存在,可以通过反射读取

3)、@Inherited:允许子类继承

4)、@Documented:生成javadoc时会包含注解信息

 

四、使用自定义注解

1、使用注解的语法:

@<注解名>(<成员名1>=<成员名值1>,<成员名2>=<成员名值2>,...)

@Description(desc="i am eyeColor", author="Mooc Boy", age=19)

public String eyeColor(){

  return "red";

}

 

五、解析注解

概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

 

Java注解