Java高级架构师-Spring 注解编程之注解属性别名与覆盖

PostgreSQL数据库全攻略:从入门到精通 本文是一份PostgreSQL数据库综合指南,涵盖安装配置、基础操作和高级管理。主要内容包括:1) PostgreSQL简介与各平台安装方法;2) 数据库基本操作,如创建数据库/表、CRUD操作、用户权限管理;3) 高级功能包括索引优化、事务控制、视图、存储过程、触发器和扩展模块;4) 数据库管理维护,涉及配置调优、备份恢复、性能监控和日常维护;5) 安全设置与高可用方案。指南提供了从入门到进阶的实用知识,强调结合官方文档进行深入学习,帮助用户高效使用这一功能强大的开源关系型数据库系统。 阅读详情

注解属性方法

在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。

注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annotation以及前面类型的数组。

复习一下,java 八种基本类型分别为,byte(字节型)、short(短整型)、int(整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型)。

其次,注解属性方法可以使用 default设置默认值。如果没有设置默认值,声明注解时必须显式设置属性,否则编译将会出错。

另外 Java 注解无法继承类,也无法实现接口。

Spring 属性方法特性

在 Spring 中,有一些注解,使用不同属性方法,却能到达相同结果。典型的如 RequestMapping。

在 WEB 项目中,设置 url 路径,我们可以在方法是这样声明:

 @RequestMapping("hello")
 public String helloAnnotation() {
 。。。。
 }

上面方法本质使用注解 value 属性。当注解声明时只需要设置一个方法时,如果属性方法为 value,不需要使用 key=value 的语法,只需要直接设置属性值即可。

另外也可以使用 path 属性方法设置。

 @RequestMapping(path = "hello")
 public String helloAnnotation() {
 。。。。
 }

两种方式,最后运行效果一致。

查看 RequestMapping 注解源码,可以发现在 value 与 path 属性方法上使用 @AliasFor,并且两个互相指向对方。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

Spring 4.2 加入 @AliasFor 注解,并使用 @AliasFor 重新更新 RequestMapping等注解,为它们内部带来了别名的功能。

@AliasFor 使用方式

在 Spring 中,@AliasFor 可以在同一注解中使用,使用方法如 RequestMapping 注解。

这种方式,带来含义明确属性方法。如 RequestMapping,path 属性方法,这个属性方法含义就比较明确,不同的人理解不会有偏差。而 value 属性含义就不是很明确,不能一下子就将它真正含义产生联系。

日常开发中,我们也要避免 i,a,b 这些无意义的命名,尽量使用含义明确的命名。这样利用维护代码的人理解。

第二点,同一注解属性方法相互别名,这样就兼容之前版本用法。

RequestMapping 注解如果仅新增 path 属性,然后根据其解析 url 路径,这样就会导致升级 Spring 版本过程,运行错误的。

一个好软件版本需要时向前兼容,如 JDK 8 兼容 JDK 6一样。

另外 @AliasFor 注解还可以作用与不同注解之前,典型的如 SpringBootApplication注解。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

SpringBootApplication#scanBasePackages 别名与 ComponentScan#basePackages。设置前者间接为后者赋值。

Spring Boot 就是使用 @Aliasfor 与组合注解功能,使用 SpringBootApplication一个注解代替 Configuration,EnableAutoConfiguration,ComponentScan。

Spring 注解属性覆盖与别名

使用 @AliasFor 注解,可以做到别名的功能。

在 Spring 中别名可以分为以下几类:

  1. 显式别名(xplicit Aliases)
  2. 隐式别名(Implicit Aliases)
  3. 传递隐式别名(Transitive Implicit Aliases)

以上三类都需要满足以下条件:

  1. 属性类型相同
  2. 属性方法必须存在默认值
  3. 属性默认值必须相同

否则运行过程中将会出错。

显式别名

如果一个注解中的两个成员通过 @AliasFor声明后互为别名,那么它们是显式别名

。

显示别名的关系如图所示。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

隐式别名

如果一个注解中的两个或者更多成员通过@AliasFor声明去覆盖同一个元注解的成员值,它们就是隐式别名

。

隐式别名如图所示。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

上图中,@One 的 name 属性与 nameAlias 别名与 @Two nameAlias 属性。由于 @One 注解中并未直接使用 @AliasFor,所以与 @One 注解隐式别名。

隐式别名类似于数学的等式。可以将其看做以下推导过程。

@One.name=@Two.nameAlias
@One.nameAlias=@Two.nameAlias
可以推导出
@One.name=@One.nameAlias

传递式隐式别名

如果一个注解中的两个或者更多成员通过@AliasFor声明去覆盖元注解中的不同成员,但是实际上因为覆盖的传递性导致最终覆盖的是元注解中的同一个成员,那么它们就是传递隐式别名。

传递式隐式别名如图所示。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

这种类型涉及了多个注解,@One#name别名了 @Two#nameAlias属性,然后在 @One#nameAlias 属性又别名了 @Three#nameAliasThree 属性。然后由于 @Two#nameAlias又别名了 @Three#nameAliasThree 属性,这就导致 @One#name与 @One#nameAlias 间接才生了关系。这种依靠传递性才生别名关系,称为 传递式隐式别名。

隐式别名类似于数学的等式。大家也可以将其用上面等式推导。

属性覆盖

属性覆盖指的是注解的一个成员覆盖另一个成员,最后两者成员属性值一致。

属性覆盖可以分为三类:

  1. 隐式覆盖(Implicit Overrides)
  2. 显示覆盖(Explicit Overrides)
  3. 传递式显式覆盖(Transitive Explicit Overrides)

隐式覆盖

当一个注解 @One 被元注解 @Two 标注,两个注解存在同样的属性方法 name。@Two#name 将会被 @One#name 属性覆盖。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

两个看似不来自不同注解的成员 name 指向了同一个成员 name。

显示覆盖

显示覆盖就比较简单了,使用 @AliasFor 注解之后,就成为显示覆盖。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

传递式显式覆盖

如果注解 @One#name 显示覆盖了 @Two#nameAlias,而 @Two#nameAlias 显示覆盖了 @Three#nameAlias,最后因为传递性,@One#name 实际覆盖了@Three#nameAlias。

Java高级架构师-Spring 注解编程之注解属性别名与覆盖

 

总结

Spring 4.2 新增 @AliasFor注解,带来一些特性。但是要注意的是仅仅存在 @AliasFor 不会执行任何语义别名。

底层原理可以参考 AnnotationUtils与 AnnotatedElementUtils。

欢迎做Java的朋友们加小编的交流群(785779447)免费获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,很值得大家借鉴和学习,扩展自己的技术广度和知识面。**

MQTT在智能家居中的实战:用Android手机控制ESP8266设备(基于EMQX) 本文详细介绍了如何利用MQTT协议构建一个完整的智能家居控制系统,通过Android手机App远程操控ESP8266设备。文章提供了从EMQX服务器部署、ESP8266端Arduino固件开发到Android客户端搭建的完整实战指南,并深入探讨了系统联调、稳定性优化与安全加固等关键环节,为物联网开发者提供了一套可复用的解决方案。 阅读详情

相关推荐

AURIX™ TC49x芯片手册中文分享(二)

主要内容为第一章、功能模块的特征

xibaofenqi的博客 1563

JAVA方法别名注解,Java注解(Annotation)中-示例

1、JDK自带(java.lang)"@Deprecated 和 @Override" 类似,"@Documented, @Inherited, @Retention, @Target" 类似。1.1 @ Override若某个方法被 @Override 的标注,则意味着该方法会覆盖父类中的同名方法。如果有方法被 @Override 标示,但父类中却没有"被 @Override 标注"的同名方法,...

weixin_39835321的博客 2840

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1555

java标注

Java注解是一个很重要的知识点,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。 掌握好Java注解有利于学习框架底层实现。@mikechen Java注解定义 Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称为元数据)。 Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。 Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置

Code Writers 2141

用Python+ArcGIS分析厦门共享单车数据:5分钟搞定订单时长与距离分布的可视化

本文详细介绍了如何利用Python和ArcGIS Pro 3.x快速分析厦门共享单车数据,实现订单时长与距离分布的可视化。通过数据清洗、预处理和高级可视化技巧,揭示用户行为特征,为运营优化提供数据支持。文章还提供了环境配置、代码示例和业务洞察,帮助开发者高效完成数据分析任务。

weixin_28327051的博客 336

【零基础教程】HEC-RAS 1D/2D全流程模拟指南|从水动力到水质建模一次搞定!

HEC-RAS由美国陆军工程兵团水文研究中心研制,具有完整的一二维耦合的水动力及水环境模拟功能,也具有闸、涵洞、桥梁以及泵站等水利构筑物的模拟能力;同时也可以与HEC研制的水文模型(HMS)、洪水淹没风险和损失分析软件(FDA)等耦合,是免费软件中使用最方便、应用最广泛的软件之一。2.HEC-RAS与HEC-HMS的耦合(不详细讲HEC-HMS)3.淹没风险分析软件HEC-FDA与HEC-RAS耦合。案例十八:HEC-RAS与HEC-HMS的耦合。案例十九:HEC-RAS与HEC-FDA的耦合。

weixin_48230888的博客 872

Java基础知识15:方法覆写,属性覆盖

hhhhhhhhhh wake and see package com.hiyo.HighClass; /** * Author:hiyo585 * Company: hiyo design studios * WeChat&phone:18961810626 * method override方法的覆写 * 在继承的关系中也存在着方法覆写的概念, * 所谓的方法覆写就是指子类定义了与父类中同名的方法, * 但是在方法覆写时必须考虑到权限, * 即被子类覆写的方法不能拥有比.

qq_34177692的博客 443

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1869

JAVA注解(什么是注解,内置注解,自定义注解)

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同, Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌 入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容。当然它也支持自定义 Java 标注。参考代码实例声明的注解类用注解的实体类。

qq_53677566的博客 673

YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]

本文主要介绍了YOLOv8旋转目标检测的流程,介绍了标签的解码、预测结果的解码,以及如何理解旋转角度等内容,还介绍旋转目标检测框的正样本选取及Loss计算。

ice 4731

【100%通过率】华为OD机试真题 Python 实现【网上商城优惠活动 / 模拟商场优惠打折II】

某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~299可使用2张减20元,以此类推; 2:92折券,1次限使用1张,如100元,则优惠后为92元, 3:无门槛5元优惠券,无使用数限制,直接减5元。

MISAYAONE的博客 9371

java中@AliasFor注解

在这个示例中,@MyAnnotation注解定义了三个属性,其中"value"和"name"属性定义了@AliasFor注解,并指定了彼此的别名关系。这表示,在使用@MyAnnotation注解时,value和name这两个属性可以互相替代使用,读取它们的值都是有效的。使用@AliasFor注解的方式是,将一个属性上的@AliasFor注解,指定到另一个属性上,表示这两个属性是别名关系,系统在使用时可以优先使用别名属性,同时它们的值也是互通的。

likang517的专栏 979

OWASP-ZAP扫描器的使用

目录 OWASP-ZAP 更新 代理 目录扫描 主动扫描(Active Scan) 扫描结果 生成报告 OWASP-ZAP OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 也可以说ZAP是一个中间人代理。它能够获取你对Web应用程序发出的所有请求以...

谢公子的博客 2万+

java 注解 属性 类型_Java高级架构师-Spring 注解编程之注解属性别名与覆盖

注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annotation以及前面类型的数组。复习一下,java 八种基本类型分别为,byte(字节型)、short(短整型)、int(整型)、long(长整型)、...

weixin_29209825的博客 426

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

requestmapping注解作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖

欢迎关注头条号:Java小野猫注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annotation以及前面类型的数组。复习一下,java 八种基本类型分别为,byte(字节型)、short(短整型)、int...

weixin_39838798的博客 144

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

componentscan注解的用法和作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖...

注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annotation以及前面类型的数组。复习一下,java 八种基本类型分别为,byte(字节型)、short(短整型)、int(整型)、long(长整型)、...

weixin_39702316的博客 156

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

Java极客技术 7621

Spring组合注解详解(注解合并及别名属性覆盖)

Spring组合注解详解(注解合并及别名属性覆盖) 组合注解   注解的作用就不用介绍了吧,主要就是用来简化配置,通过自定义注解或者其他框架提供的注解,只要往方法或者类上一加,就可以实现许多神奇的功能。   spring 4.2之后就提供了组合注解的实现方式,啥是组合注解呢,其实就是将多个注解作用于一个注解,用一个注解就可以来实现那多个注解的功能,使作用的元素(即方法或类等)看上去更简洁美观,当然主要还是更强大的属性覆盖功能。   举个最常见的组合注解吧,即spring的@Res...

我是guyue,guyue就是我O(∩_∩)O 1万+

java 属性的别名_JAVA从入门到精通之Spring注解属性别名与覆盖

本篇文章探讨了JAVA从入门到精通之Spring注解属性别名与覆盖,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annotation以...

weixin_35742845的博客 1621

Spring注解属性别名

1、@AliasFor介绍 @AliasFor是用于为注解属性声明别名的注解,从Spring Framework 4.2开始,核心Spring中的几个注释已更新为使用@AliasFor配置其内部属性别名。 1.1、使用场景 注解中的显式别名:在同一个注解中,@AliasFor可以在一对属性上声明,以表示它们是彼此可以互换的别名。 元注解中属性的显式别名:如果@AliasFor的注解属性设置...

通往神秘的道路的专栏 7511

Spring 注解属性别名与覆盖

Spring 注解属性别名与覆盖 在Spring 中将多个注解组合注解到一个注解上,这个注解就可以发挥被注解的多个注解功能。 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, cla

u010141779的博客 1378

springboot 别名不起作用_Spring 注解编程之注解属性别名与覆盖

前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。 在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annot...

weixin_40002238的博客 724

java aliasfor_Spring 注解编程之注解属性别名与覆盖

前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annota...

weixin_35771315的博客 251

@requestmapping注解的作用_Spring 注解编程之注解属性别名与覆盖

前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,enum,Annota...

weixin_39528029的博客 629
上一篇: Java手撕面试官-面试官常问的Nginx的几个问题
下一篇: Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例
程序员杨过
博客等级 码龄7年 13粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值