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

你可能感兴趣的:(学习总结,spring,boot,spring,java)