文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot中的@AliasFor注解怎么使用

2023-06-30 14:20

关注

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

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

简介

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

这个功能产生的原因:

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

实例

注解

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")        @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注解怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯