java中的注解、自定义注解
注解
注解概述
注解类似于一个商品标签,给当前程序的开发者提供信息和标记,给java编译程序员或者jvm提供数据支持和标记,有着代码量少,易读性更高的好处,本质还是一个特殊的接口。广泛应用于spring boot中
注解分为三类:jdk注解、元注解、自定义注解
常用注解jdk自带
- @override
- @Test
- @FunctionInterface
- @SuppressWarnings(“deprecation”)
Spring Boot常用注解
@Data
@RequestMapping
@Controller
@SpringBootApplication
元注解
@Documented
表示当前的注解(或自定义注解)参与javadoc文档的生成
@Retention
表示当前注解(或自定义注解)的存在阶段有三个参数:
- RetentionPolicy.SOURCE:编译阶段
- RetentionPolicy.CLASS:字节码文件生成阶段【对应的注解会生成在class文件中,但不会参与运行】
- RetentionPolicy.RUNTIME:运行阶段,参与编译阶段,生成于class文件中,参与运行阶段
RetentionPolicy.RUNTIME可以利用反射获取注解,并拿到注解里的数据内容
实际项目开发中,RetentionPolicy.RUNTIME注解会大量用于ssm,spring boot
@Target
通过枚举ElementType来限制当前注解的作用范围
ElementType 功能描述(限制范围) ElementType.TYPE 用于类和接口、枚举 ElementType.FIELD 用于成员变量 ElementType.METHOD 用于成员方法 ElementType.PARAMETER 用于成员方法参数@NotNull ElementType.CONSTRUCTOR 用于构造方法 ElementTypeANNOTATION_TYPE 用于注解 ElementType.LOCAL_VARIABLE 用于局部变量 ElementType.PACKAGE 用于包
自定义注解基本格式
@Documented//参与文档生成
@Retention(Retention.SOURCE);//参与编译阶段
@Target({ElementType.TYPE});//作用范围为类,接口,枚举
public @interface MyAnnotation{}
注解属性
概述
经典描述:以方法之名,行变量之实,实则为方法
自定义注解属性
- 自定义枚举类,新增状态
public enum MyEnum{ LOAD,START,END }
- 自定义一个注解
1.注解中任意属性没用使用default添加默认值,在使用过程中会报错,因为没有提供对应数据的能力
2.注解属性赋值时,没有明确赋值目标名称,对应的数据直接赋值给value
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface MyAnnotation{ /* 注解的反馈数据为int类型 */ int age() defult 10; String value(); /* 反馈类型为自定义枚举类型MyEnum */ MyEnum status(); }
- 注解属性获取
@MyAnnotation(value = "七月",status = LOAD) public class Demo{ public static void main(Stirng[] args){ Class<?> cls = new Demo.class; MyAnnotation an = cls.getAnnotation(MyAnnotation.class); System.out.println(an.value()); System.out.println(an.age); System.out.println(an.status); } }