注解Spring @AliasFor使用笔记

  1. 简单注解类

    java 复制代码
    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface ErasePasswordAnno {
    @AliasFor(attribute = "expression")
    String value() default "" ;
    
        String expression() default "" ;
    }
  2. 嵌套注解类

    java 复制代码
    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @ErasePasswordAnno
    public @interface MapErasePasswordAnno {
        @AliasFor(annotation = ErasePasswordAnno.class, attribute = "value")
        String value() default "['recordList']" ;
    
        @AliasFor(annotation = ErasePasswordAnno.class, attribute = "expression")
        String expression() default "['recordList']" ;
    }
  3. 编写测试代码

    java 复制代码
    @Slf4j
    public class AliasForAnnoTest {
    
        @Test
        void simple() throws NoSuchMethodException {
            Method method = MapErasePasswordAnnoTest.class.getMethod("hello");
            ErasePasswordAnno annotation = AnnotationUtils.getAnnotation(method, ErasePasswordAnno.class);
            Assertions.assertNotNull(annotation);
            log.info("annotation value : {}", annotation.value());
            log.info("annotation expression : {}", annotation.value());
        }
    
        @Test
        void complex() throws NoSuchMethodException {
            Method method = MapErasePasswordAnnoTest.class.getMethod("hello2");
            ErasePasswordAnno annotation = AnnotatedElementUtils.findMergedAnnotation(method, ErasePasswordAnno.class);
            Assertions.assertNotNull(annotation);
            log.info("annotation value : {}", annotation.value());
            log.info("annotation expression : {}", annotation.value());
        }
        
        @ErasePasswordAnno("username")
        public void hello(){
    
        }
    
        @MapErasePasswordAnno
        public void hello2(){
    
        }
    }
相关推荐
虫师c6 分钟前
字节码(Bytecode)深度解析:跨平台运行的魔法基石
java·jvm·java虚拟机·跨平台·字节码
q***721910 分钟前
Spring Boot环境配置
java·spring boot·后端
洛_尘15 分钟前
数据结构--7:排序(Sort)
java·数据结构
JIngJaneIL19 分钟前
就业|高校就业|基于ssm+vue的高校就业信息系统的设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·高校就业
一 乐25 分钟前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小区互助系统
q***577433 分钟前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
q***563837 分钟前
Spring Boot 集成 Kettle
java·spring boot·后端
stevenzqzq38 分钟前
android recyclerview缓存_缓存问题解决办法
android·java·缓存
武子康38 分钟前
Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍
java·大数据·分布式·性能优化·系统架构·dfs·fastdfs
失散1340 分钟前
分布式专题——56 微服务日志采集与分析系统实战
java·分布式·微服务·架构