diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/AliasFor.java b/hutool-core/src/main/java/cn/hutool/core/annotation/AliasFor.java index 188b1e509..fa4020c99 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/AliasFor.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/AliasFor.java @@ -3,12 +3,12 @@ package cn.hutool.core.annotation; import java.lang.annotation.*; /** - *
表示“原始属性”将作为“关联属性”的别名。 + *
{@link Link}的子注解。表示“原始属性”将作为“关联属性”的别名。 *
{@link Link}的子注解。表示“原始属性”将强制作为“关联属性”的别名。效果等同于在“原始属性”上添加{@link Alias}注解, + * 任何情况下,获取“关联属性”的值都将直接返回“原始属性”的值 + * 注意,该注解与{@link Link}、{@link AliasFor}或{@link MirrorFor}一起使用时,将只有被声明在最上面的注解会生效 + * + * @author huangchengxing + * @see Link + * @see RelationType#FORCE_ALIAS_FOR + */ +@Link(type = RelationType.FORCE_ALIAS_FOR) +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +public @interface ForceAliasFor { + + /** + * 产生关联的注解类型,当不指定时,默认指注释的属性所在的类 + */ + @Link(annotation = Link.class, attribute = "annotation", type = RelationType.FORCE_ALIAS_FOR) + Class extends Annotation> annotation() default Annotation.class; + + /** + * {@link #annotation()}指定注解中关联的属性 + */ + @Link(annotation = Link.class, attribute = "attribute", type = RelationType.FORCE_ALIAS_FOR) + String attribute() default ""; +} diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/Link.java b/hutool-core/src/main/java/cn/hutool/core/annotation/Link.java index d2f8ecacd..cb841fe79 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/Link.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/Link.java @@ -5,11 +5,20 @@ import java.lang.annotation.*; /** *
用于在同一注解中,或具有一定关联的不同注解的属性中,表明这些属性之间具有特定的关联关系。
* 在通过{@link SyntheticAnnotation}获取合成注解后,合成注解获取属性值时会根据该注解进行调整。
- * 注意:该注解的优先级低于{@link Alias};且与{@link MirrorFor}或{@link AliasFor}一起使用时,将只有被声明在最上面的注解会生效
+ *
+ *
该注解存在三个字注解:{@link MirrorFor}、{@link ForceAliasFor}或{@link AliasFor}, + * 使用三个子注解等同于{@link Link}。但是需要注意的是, + * 当注解中的属性同时存在多个{@link Link}或基于{@link Link}的子注解时, + * 仅有声明在被注解的属性最上方的注解会生效,其余注解都将被忽略。 + * + * 注意:该注解的优先级低于{@link Alias} * * @author huangchengxing * @see SyntheticAnnotation * @see RelationType + * @see AliasFor + * @see MirrorFor + * @see ForceAliasFor */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/MirrorFor.java b/hutool-core/src/main/java/cn/hutool/core/annotation/MirrorFor.java index 99ffdab4b..e006b6e79 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/MirrorFor.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/MirrorFor.java @@ -3,7 +3,7 @@ package cn.hutool.core.annotation; import java.lang.annotation.*; /** - *
表示注解的属性与指定的属性互为镜像,通过一个属性将能够获得对方的值。
+ *
{@link Link}的子注解。表示注解的属性与指定的属性互为镜像,通过一个属性将能够获得对方的值。
* 它们遵循下述规则:
*