千家信息网

SpringBoot中的@AliasFor注解怎么使用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"SpringBoot中的@AliasFor注解怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot中的@AliasFor注解怎么使用"文章能帮助大家解决
千家信息网最后更新 2026年10月31日SpringBoot中的@AliasFor注解怎么使用

本文小编为大家详细介绍"SpringBoot中的@AliasFor注解怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot中的@AliasFor注解怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

用法1:注解的属性互为别名

简介

它可以注解到自定义注解的两个属性上,表示这两个互为别名,也就是说这两个属性其实同一个含义。

  • 其中一个属性名必须是"value"

  • 无论指明设置哪个属性名设置属性值,另一个属性名也是同样属性值,也可以缺省属性名。

  • 若两个都指明属性值,要求值必须相同,否则会报错。

  • 使用简洁。这样使用之后,@MyAnno(location="shanghai")可以直接写为:@MyAnno("shanghai");

这个功能产生的原因:

若自定义注解有一个属性,且该属性命名上为了体现其含义,调用方必须每次使用自定义注解的时候,都必须写明属性 ,然后设置,这样稍微麻烦。

实例

注解

package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})@Documented@Inheritedpublic @interface MyAnnotation {    @AliasFor(attribute = "location")    String value() default "";        @AliasFor(attribute = "value")    String location() default "";}

控制器

package com.example.controller; import com.example.annotation.MyAnnotation;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; @RestController@RequestMapping("/hello")public class HelloController {     @MyAnnotation(value = "location")    /*//下边这两种写法结果与上边是相同的    @MyAnnotation("location")    @MyAnnotation(location = "location")*/    @RequestMapping("/test1")    public String test1() {        MyAnnotation myAnnotation = null;        try {            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test1"), MyAnnotation.class);        } catch (NoSuchMethodException e) {            e.printStackTrace();        }         return  "value:" + myAnnotation.value() + ";loation:" + myAnnotation.location();    }}

测试

前端访问:http://localhost:8080/hello/test1

前端结果(value和location都是同一个值)

value:location;loation:location

用法2.继承父注解的属性,不重写属性名

简介

子注解的属性值的读写,其实是对父注解的属性值的读写。(对继承的属性来说)

此时,只能读写继承了的属性值。

代码

注解

package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})@Documented@Inheritedpublic @interface MyAnnotation {    @AliasFor(attribute = "location")    String value() default "";        @AliasFor(attribute = "value")    String location() default "";}
package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})@Documented@Inherited@MyAnnotationpublic @interface SubMyAnnotation {    @AliasFor(annotation = MyAnnotation.class)    String location() default ""; //    这个不能写,只能有一个与父属性名同名的属性,否则报错//    @AliasFor(annotation = MyAnnotation.class)//    String value() default "";}

控制器

package com.example.controller; import com.example.annotation.MyAnnotation;import com.example.annotation.SubMyAnnotation;import org.springframework.core.annotation.AnnotatedElementUtils;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; @RestController@RequestMapping("/hello")public class HelloController {    @SubMyAnnotation(location = "location(my)")    @RequestMapping("/test")    public String test() {        SubMyAnnotation subMyAnnotation = null;        MyAnnotation myAnnotation = null;        MyAnnotation myAnnotation1 = null;         try {            subMyAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), SubMyAnnotation.class);            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);            myAnnotation1 = AnnotatedElementUtils.getMergedAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);        } catch (NoSuchMethodException e) {            e.printStackTrace();        }         return "loation(sub):" + subMyAnnotation.location() + "\n" +                "location:" + myAnnotation.location() + "\n" +                "location:" + myAnnotation1.location();    }}

测试

前端访问:http://localhost:8080/hello/test

结果

loation(sub):location(my)
location:
location:location(my)

用法3:继承父注解的属性,并重写属性名

简介

子注解的属性值的读写,其实是对父注解的属性值的读写。(对重写的属性来说)

无论指明设置哪个属性名设置属性值,另一个属性名也是同样属性值,不可以缺省属性名。

若两个都指明属性值,要求值必须相同,否则会报错。

代码

注解

package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})@Documented@Inheritedpublic @interface MyAnnotation {    @AliasFor(attribute = "location")    String value() default "";        @AliasFor(attribute = "value")    String location() default "";}
package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})@Documented@Inherited@MyAnnotationpublic @interface SubMyAnnotation {    @AliasFor(attribute = "value", annotation = MyAnnotation.class)    String subValue() default "";     @AliasFor(attribute = "location", annotation = MyAnnotation.class)    String subLocation() default ""; //    subLocation属性写成下边这两种结果是一样的//    @AliasFor(attribute = "value", annotation = MyAnnotation.class)//    String subLocation() default ""; //    @AliasFor(value = "location", annotation = MyAnnotation.class)//    String subLocation() default "";//}

控制器

package com.example.controller; import com.example.annotation.MyAnnotation;import com.example.annotation.SubMyAnnotation;import org.springframework.core.annotation.AnnotatedElementUtils;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; @RestController@RequestMapping("/hello")public class HelloController {    @SubMyAnnotation(subValue = "subLocation")//    @SubMyAnnotation(subLocation = "subLocation")   //这个与上边结果相同//    @SubMyAnnotation("subLocation")   //缺省属性名会报错    @RequestMapping("/test")    public String test() {        SubMyAnnotation subMyAnnotation = null;        MyAnnotation myAnnotation = null;        MyAnnotation myAnnotation1 = null;         try {            subMyAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), SubMyAnnotation.class);            myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);            myAnnotation1 = AnnotatedElementUtils.getMergedAnnotation(this.getClass().getMethod("test"), MyAnnotation.class);        } catch (NoSuchMethodException e) {            e.printStackTrace();        }        return "subValue:" + subMyAnnotation.subValue() + ";subLoation:" + subMyAnnotation.subLocation() + "\n" +                "value:" + myAnnotation.value() + ";location:" + myAnnotation.location() + "\n" +                "value:" + myAnnotation1.value() + ";location:" + myAnnotation1.location();    }}

测试

前端访问:http://localhost:8080/hello/test

结果

subValue:subLocation;subLoation:subLocation
value:;location:
value:subLocation;location:subLocation

读到这里,这篇"SpringBoot中的@AliasFor注解怎么使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

属性 注解 结果 两个 相同 前端 控制器 文章 简介 会报 控制 测试 上边 代码 内容 别名 含义 妥当 简洁 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 互联网科技工作委员会 科技金融是不是互联网金融 互联网科技巨头监管 互联网科技深圳 青岛互联网科技公司 互联网科技论文 互联网科技网站 佰商互联网科技有限公司 互联网科技公司做什么 互联网金融科技公司干啥的 互联网时代科技改变生活 链环科技传统企业怎么转型互联网 本届互联网博览会上的黑科技 广州新华互联网科技学校电竞方面 阿里互联网科技企业 宁波跨境商互联网科技有限公司 河南商务圈互联网科技有限公司 承德科技产业互联网平台 科技互联网企业在行动 银优互联网科技有限公司 互联网科技美容 互联网科技股午盘股票涨跌 海南购全球互联网科技 互联网教育科技公司vipkid 阿里互联网科技企业 吉林省码上互联网科技电话 米泉互联网科技专业怎么样 互联网科技创业计划的风险分析 前海云享互联网科技
0