- 简单注解类
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ErasePasswordAnno {
@AliasFor(attribute = "expression")
String value() default "" ;String expression() default "" ;
}
- 嵌套注解类
@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']" ;
}
- 编写测试代码
@Slf4j
public class AliasForAnnoTest {@Testvoid 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());}@Testvoid 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(){}@MapErasePasswordAnnopublic void hello2(){}
}