java 注解
时间: 作者:走吧走吧
注解是什么
Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
注解的作用
注解的作用:分三种。源码/编译/运行时
编写文档:通过代码里标识的元数据生成文档
代码分析:通过代码里标识的元数据对代码进行分析
编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查
注解的分类
根据注解在程序的哪个阶段分类
源码注解:注解只在源码中存在,编译成.class文件就不存在了
编译时注解:注解在源码和.class文件中都存在
运行时注解:在运行阶段还会起作用,甚至会影响运行逻辑根据来源分类:
JDK自带的注解
常见的第三方注解
自定义注解
java中常见的注解
jdk自带注解
@Override 覆盖了父类的方法。 以后在见到的时候,可以直接相信这个类。
@Deprecated 父类有一个方法,已经过时,但是为了兼容以前的类。加这个注释。
@Suppvisewarnings
当父类的方法加了@Deprecated 之后,子类在引用的时候会有警告。加注释3。忽略警告。
这三个都是修饰方法的。
常见第三方注解(Spring) :
@Autowired 可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作
@Service 一般用在service层
@Repository 一般用在dao层
元注解
- 元注解的作用就是负责注解其他注解。
- 元注解包括:
@Target 注解的作用域
@Retention 注解的生命周期
@Inherited 标识性的,表示这个注解允许子类继承的
@Documented 生成javadoc时会包含注解。
@Target 注解的作用域
@Target 说明了Annotation所修饰的对象范围,在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Target的取值(ElementType)有:
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention 注解的生命周期
@Retention 定义了该Annotation被保留的时间长短(可以在源码上、.class文件中、)
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@Retention的取值(RetentionPoicy)有:
SOURCE:在源文件中有效(即源文件保留)CLASS:在class文件中有效(即class保留)RUNTIME:在运行时有效(即运行时保留)
@Inherited 标识性的,表示这个注解允许子类继承的
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。@Documented 生成javadoc时会包含注解。
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
自定义注解
public @interface Description{
String dese();
String author();
int age() default 18;
}
- 使用@interface关键字定义注解
- 方法。成员以无参、无异常的方式声明。
- 可以给成员指定默认值。成员的类型是受到限制的。包括java的原始类型和String、Class、Annotation、Enumeration
- 如果注解只有一个成员变量,则成员取名为value(),在使用使用时可以忽略成员名和赋值号。
- 注解类可以没有成员,没有成员的注解成为标识注解。
关于自定义注解的使用,希望大家再学习学习
使用自定义注解
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,…)