@AliasFor注解

@AliasFor是一个注解,用于为注解属性声明别名。

代码如下:它有两个属性value和attribute @AliasFor注解注释了

自身,并且value和attribute互为别名



把多个元注解的属性组合在一起形成新的注解

如我们熟知的@SpringBootApplication :



如上所示@SpringBootApplication并没有定义新的属性而是复用其他注解已有的注解属性并对其进行组合

形成新的注解从而到达到便捷的目的。这样的注解我们可以称之为复合注解。

所以在使用SpringBoot 时我们只需要@SpringBootApplication一个注解就能开启

自动配置,自动扫描的功能。

而不再需要使下面三个注解来达到同样的目的。

@Configuration

@ComponentSan

@EnnableAutoConfiguration

2.继承注解的功能

如@Controller,@Service,@Repository都继承了@Component的功能

他们的基本作用和@Component完全一样都是标明某个类是

Spring的Bean,需要Spring容器进行管理。不同之处在于对Spring bean进行了归类,从而能对不同类型的Bean进行不同的处理。

@Service代码如下



在同个注解中为同一个功能定义两个名称不一样的属性,那么这两个属性彼此互为别名

如@RequestMapping注解中的value和path它们两互为别名。如下所示:



这么做的目的在于

1.更便捷

当我们只定义一个属性的时候往往可以省略属性名如:

@RequestMapping(“/user”)

2.顾名思义

当我门定义多个属性时为了能做到顾名思义

使之达到一目了然的效果我们需要选择一个更加贴合特定场景的名称。

@RequestMapping(path = “/user”,method = RequestMethod.GET)

当然你也可以这样:

@RequestMapping(value = “/user”,method = RequestMethod.GET)

只是这样子的定义value = “/user” 不能很准确地传达代码的意图。

根据@AliasFor的使用形式我们可以将它分为三类:

1.注解内部的显性别名

在单个注解中,可以把@AliasFor声明在一对属性上标明它们彼此之间互无别名如下所示: ContextConfiguration中的value和locations是彼此的显性别名



实现要求:

1.组成别名对的每个属性都必须用@AliasFor进行注释,并且AliasFor中的值

必须指向别名对中的另一个属性

2.别名化的属性必须声明相同的返回类型

3.别名化的属性必须声明默认值

4.别名化的属性默认值必须相同

2.用于元注解属性的显性别名

如果被@AliasFor注释的属性指向的是它所在注解之外的其他注解,

那么这个属性被解释成元注解属性的别名。(称之为显性的元注解属性重写)

我们可以通过重写继承一个或多个其他注解的功能从而

使得可以更细粒度精准地控制注解层级中属性的重写,

不像Java中继承必须继承父类的所有功能。

实际上,使用@AliasFor甚至可以为元注解的value属性声明别名.

如下所示:@MyTestConfig下的xmlFiles指向的是一个元注解@ContextConfiguration的属性locations



实现要求:

1 如果一个属性是一个元注解属性的别名,那么这个属性必须用@AliasFor进行注释并且

该属性必须指向元注解属性。

2 别名化的属性必须声明相同的返回结果

3.@AliasFor的annotation属性必须引用元注解

4.被引用的元注解必须放置在声明了@AliasFor的注解类上

3 注解中的隐性别名

如果注解中的一个或多个属性声明为同一个元注解属性的属性重写(直接地或传递地重写)

那么这些注解会被当作彼此的隐性别名集来对待

结果是它们的行为类似于注解中的显性别名

如下所示:@MyTestConfig中,value,groovyScripts和xmlFiles

都是复写了@ContextConfiguration中locations属性的,因此这

三个属性是彼此的隐性别名。



注解中的可传递隐性别名

如下所示:在GroovyOrXmlTestConfig中,groovy是对上面的MyTestConfig中的groovyScripts属性显示的复写,

而xml是对@ContextConfiguration中locations属性的显示的复写,

我们就可以称groovy和xml是彼此的可传递隐性别名,因为它们实际上只是复写ContextConfiguration中的locations属性。



实现要求:

1.属于隐性别名组中的每一个属性必须使用@AliasFor进行注释,并且attribute必须引用相同元注解中的同一个属性

2.别名化的属性必须声明相同的返回类型

3.别名化的属性必须定义默认值

4.别名化的属性必须声明相同的默认值

5.注解必须引用合适的元注解

6.被引用的元注解必须放置在声明了@AliasFor的注解上

链接:https://www.jianshu.com/p/d6bba708100d

来源:简书

@AliasFor注解的更多相关文章

  1. 关于如何使用Spring里@AliasFor注解进行注解的封装

    不知道大家每次使用Spring boot的时候有没有看过它启动类里 @SpringBootApplication这个注解呢?众所周知,这个注解是一个复合注解,但是注解是不能继承元注解的属性的,也就是说 ...

  2. @AliasFor 注解

    Spring 框架提供了很丰富的注解可以让我们很方便的进行 Spring 配置,今天要讲的注解--@AliasFor之前你可能并没有关注过,因为平时开发时我们的确不太会用到. 我关注到这个注解是因为我 ...

  3. 朱晔和你聊Spring系列S1E9:聊聊Spring的那些注解

    本文我们来梳理一下Spring的那些注解,如下图所示,大概从几方面列出了Spring的一些注解: 如果此图看不清楚也没事,请运行下面的代码输出所有的结果. Spring目前的趋势是使用注解结合Java ...

  4. Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils

    Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目录(https://www.cnblogs.com/binary ...

  5. Spring @AliasFor

    原文地址:https://blog.csdn.net/wolfcode_cn/article/details/80654730 在Spring的众多注解中,经常会发现很多注解的不同属性起着相同的作用, ...

  6. Spring 注解编程之注解属性别名与覆盖

    前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖. 注解属性方法 在进入了解 Spring 注解属性功能 ...

  7. 品Spring:能工巧匠们对注解的“加持”

    问题的描述与方案的提出 在Spring从XML转向注解时,为了自身的开发方便,对注解含义进行了扩充(具体参考本号上一篇文章). 这个扩充直接导致了一个问题,就是需要从注解往元注解以及元元注解(即沿着从 ...

  8. 品Spring:注解终于“成功上位”

    历史还是抛弃了XML,当它逐渐尝到注解的甜头之后. 尤其是在Spring帝国,到处充满着注解的气息. 注解从一个提供附属信息的“门客”,蜕变为颇具中流砥柱的“君侯”. 注解成功登上了帝国的舞台,定会像 ...

  9. 跟Evan学Sprign编程思想 | Spring注解编程模式【译】

    Spring注解编程模式 概况 多年来,Spring Framework不断发展对注解.元注解和组合注解的支持. 本文档旨在帮助开发人员(Spring的最终用户以及Spring Framework和S ...

随机推荐

  1. MeteoInfoLab脚本示例:AIRS Grid HDF数据

    AIRS Grid HDF数据是HDF4 EOS格式,数据地理坐标信息可以被MeteoInfo自动识别,脚本程序更为简单.需要注意的是读取数据时Y轴是反向的(卫星数据通常如此).脚本程序: #Add ...

  2. Git之多人协同开发

    一.获取远程库信息 1 2 3 $ git remote -v origin  https://github.com/xxxxx/node.git (fetch) origin  https://gi ...

  3. 提取swagger内容到csv表格,excel可打开

    swagger生成的页面api接口统计,有几种方法 直接在前端用js提取出来,较麻烦(不推荐,不同版本的页面生成的标签有可能不一样,因此可能提取不出来) //apilet a = document.g ...

  4. BST,Splay平衡树学习笔记

    BST,Splay平衡树学习笔记 1.二叉查找树BST BST是一种二叉树形结构,其特点就在于:每一个非叶子结点的值都大于他的左子树中的任意一个值,并都小于他的右子树中的任意一个值. 2.BST的用处 ...

  5. 闭嘴,给你一个数!1分钟,学完C语言指针,不扎手只扎心的针!

    序言 指针是C语言学习者绕不过的一道坎,也是C语言学习者不得绕过的一道坎.辨别一个人C语言学的好赖就看他对指针的理解怎么样.指针内容也是工作面试经常问到的问题.本文将带你重新认识那个绊倒你的指针,以解 ...

  6. 【树】HNOI2014 米特运输

    题目大意 洛谷链接 给出一课点带权的树,修改一些点的权值使该树满足: 同一个父亲的儿子权值必须相同 父亲的取值必须是所有儿子权值之和 输入格式 第一行是一个正整数\(N\),表示节点的数目. 接下来\ ...

  7. 搭建分布式 Redis Cluster 集群与 Redis 入门

    目录 Redis 集群搭建 Redis 是啥 集群(Cluster) Redis Cluster 说明 Redis Cluster 节点 Redis Cluster 集群模式 不能保证一致性 创建和使 ...

  8. linux(centos8):禁用selinux(临时关闭/永久关闭)

    一,selinux的用途 1,什么是selinux SELinux:即安全增强型 Linux(Security-Enhanced Linux) 它是一个 Linux 内核模块,也是 Linux 的一个 ...

  9. MS SQL SERVER执行大脚本文件时,提示“内存不足”的解决办法

    问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行 ...

  10. 51node1256 乘法匿元(扩展欧几里得)

    #include<iostream> using namespace std; int gcd(int a,int b,int &x,int &y){ if (b==0){ ...