目录
一、JAVA注解
1、java注解的定义
Java注解是附加在代码中的一些元信息,用于一些工具在编译、
运行时进行解析和使用,起到说明、配置的功能。注解相关类都包含在java.lang.annotation包中。
2、java注解的分类
2.1 JDK基本注解
2.1.1 @Override
重写
2.1.2 @Deprecated
已过时
2.1.3 @SuppressWarnings(value = "unchecked")
压制编辑器警告
2.2 JDK元注解
元注解用于修饰其他的注解(纪委:管干部的干部)
2.2 .1 @Retention:定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) //注解会在class字节码文件中存在,在运行时可以通过反射获取到2.2 .2 @Target:指定被修饰的Annotation可以放置的位置(被修饰的目标)
@Target(ElementType.TYPE) //接口、类
@Target(ElementType.FIELD) //属性
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE) //局部变量
@Target(ElementType.ANNOTATION_TYPE) //注解
@Target(ElementType.PACKAGE) //包
注:可以指定多个位置,例如:
@Target({ElementType.METHOD, ElementType.TYPE}),也就是此注解可以在方法和类上面使用
2.2 .3 @Inherited:指定被修饰的Annotation将具有继承性2.2.4@Documented:指定被修饰的该Annotation可以被javadoc工具提取成文档.
2.3 自定义注解
(第二个大点讲到 2.2 .4 @Documented:指定被修饰的该Annotation可以被javadoc工具提取成文档.)
3、注解分类
根据Annotation是否包含成员变量,可以把Annotation分为两类:
3.1标记Annotation:
没有成员变量的Annotation; 这种Annotation仅利用自身的存在与否来提供信息
3.2 元数据Annotation:
包含成员变量的Annotation;他们可以接受(或提供)更多的元数据。
二、自定义注解开发
1、自定义注解的定义
使用@interface关键字, 其定义过程与定义接口非常类似, 需要注意的是:Annotation的成员变量在Annotation定义中是以无参的方法形式来声明的, 其方法名和返回值类型定义了该成员变量的名字和类型, 而且我们还可以使用default关键字为这个成员变量设定默认值
2、实例
以一个实例来讲:创建一个注解叫做MyAnnotation,在类的上面有四个源注解。
package com.zxy.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import java.lang.annotation.*;
@Documented
@Target({ElementType.TYPE,ElementType.METHOD})//该注解只能写在类上
@Retention(RetentionPolicy.RUNTIME)//停留在源码阶段
@Inherited//继承
public @interface MyAnnotation {
String value() default "";
String message() default "aaa";
}
1、@Documented:指定被修饰的该Annotation可以被javadoc工具提取成文档。
2、@Target({ElementType.TYPE,ElementType.METHOD})是指这个注解可以用在方法上面
在对应枚举中有相关属性介绍:
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,类/** Field declaration (includes enum constants) */
FIELD,属性/** Method declaration */
METHOD,/** Formal parameter declaration */
PARAMETER,/** Constructor declaration */
CONSTRUCTOR,/** Local variable declaration */
LOCAL_VARIABLE,/** Annotation type declaration */
ANNOTATION_TYPE,/** Package declaration */
PACKAGE,/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
3、@Inherited:指定被修饰的Annotation具有继承性。
4、@Retention注解的情况:写一个测试类进行测试。
4.1、@Retention(RetentionPolicy.S