注解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(){
    
        }
    }
相关推荐
沉默-_-几秒前
力扣hot100普通数组(1)--C++
java·数据结构·算法·leetcode·数组
colicode2 分钟前
java短信接口开发对接全流程:Spring Boot项目集成短信功能详解
java·开发语言·spring boot
HalvmånEver7 分钟前
Linux:线程的概念、与进程区别及内核实现(线程一)
java·linux·运维
晓13138 分钟前
第四章:Redis实战应用及常见问题(下篇)
java·数据库·缓存·wpf
量子炒饭大师8 分钟前
【C++入门】Cyber霓虹镜像城的跨域通行证 —— 【友元(friend)】跨类协作破坏封装性?友元函数与友元类为你架起特权桥梁!
java·开发语言·c++·友元函数·友元类·friend
没有bug.的程序员11 分钟前
Spring Cloud Stream:消息驱动微服务的实战与 Kafka 集成终极指南
java·微服务·架构·kafka·stream·springcloud·消息驱动
{Hello World}12 分钟前
Java内部类:深入解析四大类型与应用
java·开发语言
春日见12 分钟前
C++单例模式 (Singleton Pattern)
java·运维·开发语言·驱动开发·算法·docker·单例模式
SamRol13 分钟前
达梦数据库指令 及 在Spring Boot + MyBatis-Plus上的使用
java·数据库·spring boot·mybatis·达梦·intellij idea
大白要努力!15 分钟前
Android Spinner自定义背景
java·开发语言