注解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(){
    
        }
    }
相关推荐
何中应2 分钟前
使用Spring自带的缓存注解维护数据一致性
java·数据库·spring boot·后端·spring·缓存
ZeroToOneDev2 分钟前
Mybatis
java·数据库·mybatis
步步为营DotNet3 分钟前
深度解读.NET中ConcurrentDictionary:高效线程安全字典的原理与应用
java·安全·.net
heartbeat..5 分钟前
Spring Boot 学习:原理、注解、配置文件与部署解析
java·spring boot·学习·spring
零度@6 分钟前
Java 消息中间件 - 云原生多租户:Pulsar 保姆级全解2026
java·开发语言·云原生
野犬寒鸦8 分钟前
从零起步学习RabbitMQ || 第一章:认识消息队列及项目实战中的技术选型
java·数据库·后端
IT 行者10 分钟前
Spring Security OAuth2 ID Token 生成机制深度解析
服务器·spring
海鸥8111 分钟前
k8s中items.key的解析和实例
java·docker·kubernetes
老毛肚12 分钟前
Spring源码探究1.0
java·后端·spring
韩立学长15 分钟前
【开题答辩实录分享】以《以体验为中心的小学古诗互动学习App的设计及实现》为例进行选题答辩实录分享
java·spring·安卓