admin管理员组

文章数量:1794759

springboot自定义注解

springboot自定义注解

1.自定义注解的使用场景

Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。

2.注解的基本知识

注解分为两种,元注解和自定义注解。

Target:描述了注解修饰的对象范围,取值在javalangannotationElementType定义,常用的包括:

  • METHOD:用于描述方法
  •  PACKAGE:用于描述包
  • PARAMETER:用于描述方法变量
  • TYPE:用于描述类、接口或enum类型·FILE:用于描述字段(bean类字段)

Retention:表示注解保留时间长短。取值在javalangannotationRetentionPolicy中,取值为:

  • SOURCE:在源文件中有效,编译过程中会被忽略
  • CLASS:随源文件一起编译在class文件中,运行时忽略
  • RUNTIME:在运行时有效,只有定义为RetentionPolicyRUNTIME时,我们才能通过注解反射获取到注解。
3.使用方法

假设我们要自定义一个注解,它用在字段上,并且可以通过反射获取到,功能是用来描述字段的高度和作用。可以定义如下:

  • 定义注解
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface MyField { //描述信 String descMsg(); //高度 int height(); }
  • 反射获取注解
public class MyFieldTest { //使用我们的自定义注解 @MyField(descMsg = "用户", height = 184) private String username; @Test public void testMyField() { // 获取类模板 Class testClass = MyFieldTest.class; // 获取所有字段 for (Field f : testClass.getDeclaredFields()) { //判断这个字段是否有MyField注解 if (f.isAnnotationPresent(MyField.class)) { MyField annotation = f.getAnnotation(MyField.class); System.out.println("字段:["+ f.getName()+"],描述:["+ annotation.descMsg()+"],长度:["+ annotation.height() +"]"); } } } }
  • 运行结果

字段:[username],描述:[用户],长度:[184]

Process finished with exit code 0

本文标签: 自定义注解SpringBoot