Java轻松开发自定义注解

注解开发

元注解

@Target(ElementType)

修饰的这个注解的使用范围,即被描述的注解可以用在哪里。

@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.TYPE, ElementType.METHOD})**


@Retention(RetentionPolicy)

注解的生存周期,即会保留到哪个阶段。

  1. SOURCE. 注解保留在源代码中,但是编译的时候会被编译器所丢弃。比如@Override, @SuppressWarnings;
  2. CLASS. 这是默认的policy。注解会被保留在class文件中,但是在运行时期间就不会识别这个注解
  3. RUNTIME. 注解会被保留在class文件中,同时运行时期间也会被识别。所以可以使用反射机制获取注解信息。比如@Deprecated。

自定义注解

@interface就是用来定义注解的,类似于class定义类 和 interface 定义接口

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoCheck {

    String value() default "";
}

String value() default"“;定义一个value()的方法,返回值类型时String没有赋值默认返回”"这个字符串

定义注解配置类

@Aspect
@Component
@Slf4j
public class AutoInterceptor {

    static {
        log.info("AutoInterceptor run ...");
    }

    @Pointcut("execution(* *(..))")
    private void pointCut() {
    }

    @Around("pointCut() && @annotation(autoCheck)")
    public void beforeCheckBean(JoinPoint point, AutoCheck autoCheck) throws Exception {
        // 判断注解中的属性是否为空
        if(autoCheck.value().equals("")){
            System.out.println("autoCheck:"+"注解属性为空");
        }else {
            System.out.println(autoCheck.value());
        }
    }
}

测试

@RestController
public class UserController {

    @GetMapping("/user")
    @AutoCheck(value = "testAutoCheck")
    public String test(){
        return "testuser";
    }
}

在这里插入图片描述

在这里插入图片描述

成功…

你可能感兴趣的:(java,开发语言)