@AliasFor注解
@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注解相关推荐
- Spring中@AliasFor注解的作用及原理
本文基于Springboot 2.1.6.RELEASE 版本分析. 关于@AliasFor注解,曾提过的一个issue Explicit attribute overrides configured ...
- @AliasFor注解详解(结合源码分析)
一. 概述 网上关于该注解的描述大都抄来抄去,没有涉及到最本质的源码问题, 下面是笔者结合注解源码, 以及其他常用的注解源码, 来分析@AliasFor注解的主要功能以及展示实际使用场景 描述:@Al ...
- java中@AliasFor注解
Java中的@AliasFor注解,是Spring框架的一个元注解,用于指定注解的别名关系.它可以用于定义同一个注解的多个属性之间的别名关系,让它们在使用时可以互相替代. 使用@AliasFor注解的 ...
- java aliasfor_@AliasFor注解
@AliasFor注解 @AliasFor是一个注解,用于为注解属性声明别名. 代码如下:它有两个属性value和attribute @AliasFor注解注释了 自身,并且value和attribu ...
- java aliasfor_Spring中@AliasFor注解的三种用法
查看Spring中的@AliasFor的文档,英文描述如下: Usage Scenarios Explicit aliases within an annotation: within a singl ...
- 如何获取注解中的值_如何在运行时利用注解信息
注解( annontation )是 Java 1.5 之后引入的一个为程序添加元数据的功能.注解本身并不是魔法,只是在代码里添加了描述代码自身的信息,至于如何理解和使用这些信息,则需要专门的解析代码 ...
- 浅谈Spring注解
Spring目前的趋势是使用注解结合Java代码而不是配置来定义行为.属性.功能.规则和扩展点,因此梳理注解也是梳理Spring功能点的很好的方式,全面的梳理可以补足我们知识点的漏洞. 查找所有注解 ...
- 【Spring】Spring 深入理解注解及spring对注解的增强
1.概述 深入理解注解及spring对注解的增强 2. 什么是注解? 代码中注释大家都熟悉吧,注释是给开发者看的,可以提升代码的可读性和可维护性,但是对于java编译器和虚拟机来说是没有意义的,编译之 ...
- Spring框架----Confinguration和Component-Scan注解
如何不用xml配置文件 这里面有两块内容,第一块是component-scan.第二块是对象的创建,我们之前的注解都是解决了我们自己写的类加一个注解. 我们建了一个SpringConfiguratio ...
最新文章
- 数据结构(莫队算法):国家集训队2010 小Z的袜子
- 计算机16进制应用,16进制计算器安装方法 16进制计算器使用技巧
- Item category dropdown list的determine - filtering 逻辑
- 从全职高手开始的系统_动画全职高手第二季热血回归,腾讯视频的国漫IP全链路开发之道...
- Leetcode 08. 字符串转换整数 (atoi)
- micopython 18b20_[MicroPython]stm32f407控制DS18B20检测温度
- PAT 乙级 1027. 打印沙漏(20) Java版
- delete语句与reference约束冲突怎么解决_一条简单的更新语句,MySQL是如何加锁的?...
- java 之 插入排序
- Hyperledger Fabric ./byfn.sh -m up -s couchdb Error peer0.org1 failed to join the channel
- Java 程序开发设计文档
- 设计物联网系统的步骤和原则有哪些
- GD32F103 配置timer0输出PWM
- 为什么很多人不喜欢甚至排斥用中文编程?
- allure报告定制
- CLIP Learning Transferable Visual Models From Natural Language Supervision (文本和图像的对比学习)--文献翻译和笔记
- Ubuntu 20.04 X86成功编译运行wayland、wayland-protocols、weston,亲测有效,踩了很多坑,完美解决。
- 时域,频域和空域的概念
- Word论文中关于章、节、图、表、公式自动编号及引用
- java华氏度xhuan_java摄氏度转换华氏度
热门文章
- android网络电话,安卓网络电话,安卓网络电话哪个好
- java计算机毕业设计H5新冠防疫宣传网站设计与实现MyBatis+系统+LW文档+源码+调试部署
- Cannot create an instance of class xxxxBinding
- 微信临时素材接口_在接口中表达临时性
- Unity 一键翻译
- Qt - 音视频播放
- 【傻瓜版】获取小红书无水印图片
- android模拟器有用吗,逍遥安卓模拟器好用吗?评测成绩最流畅好用的安卓模拟器...
- 错误 LNK2019 无法解析的外部符号 “__declspec(dllimport) public: int __thiscall osg::Referenced::ref(void)const “
- STM32——04-初识STM32单片机