首页 > 其他分享 >5.@AliasFor注解

5.@AliasFor注解

时间:2022-10-08 19:00:26浏览次数:38  
标签:ContextConfiguration 别名 注释 value 注解 AliasFor 属性

注解定义如下:

 1 @Retention(RetentionPolicy.RUNTIME)
 2 @Target(ElementType.METHOD)
 3 @Documented
 4 public @interface AliasFor {
 5 
 6     @AliasFor("attribute")
 7     String value() default "";
 8 
 9     @AliasFor("value")
10     String attribute() default "";
11 
12     Class<? extends Annotation> annotation() default Annotation.class;
13 
14 }

1. 属性说明

1.1 annotation属性

声明别名属性的注释类型。
默认为注释,这意味着别名属性在与此属性相同的注释中声明。

1.2. attribute属性

此属性是其别名的属性的名称。

1.3. value属性

用于在未声明注释时代替属性-例如:@AliasFor(“value”)而不是@AliasFor(attribute=“value”)。

2. 注解用法

2.1 使用场景:

  • 在注解中一对属性上通过声明@AliasFor,进行属性互换。
  • 在注解上声明了另一个注解,对另一个注解的属性进行别名覆盖。
  • 隐式别名

2.2 实现上

通过MergedAnnotations加载@AliasFor注解实现别名功能。

2.3 实施要求

注解中的显示别名:

  • 构成别名对的每个属性都应该用@AliasFor注释,并且属性或值必须引用该对中的另一个属性。由于Spring Framework 5.2.1,从技术上讲,可以只注释别名对中的一个属性;但是,建议在别名对中对这两个属性进行注释,以获得更好的文档以及与Spring Framework早期版本的兼容性。
  • 别名属性必须声明相同的返回类型。
  • 别名属性必须声明默认值。
  • 别名属性必须声明相同的默认值。
  • 不应声明注释。

元注释中属性的显式别名:

  • 作为元注释中属性别名的属性必须用@AliasFor注释,并且属性必须引用元注释中的属性。
  • 别名属性必须声明相同的返回类型。
  • 注释必须引用元注释。
  • 引用的元注释必须在声明@AliasFor的注释类上存在。

注释中的隐式别名:

  • 属于一组隐式别名的每个属性都必须用@AliasFor注释,并且属性必须在同一元注释中引用同一属性(直接或通过注释层次结构中的其他显式元注释属性覆盖传递)。
  • 别名属性必须声明相同的返回类型。
  • 别名属性必须声明默认值。
  • 别名属性必须声明相同的默认值。
  • 注释必须引用适当的元注释。
  • 引用的元注释必须在声明@AliasFor的注释类上存在。

3. 实例

示例1:注释中的显式别名,在@ContextConfiguration中,value 和locations 是彼此的显式别名。

 1  public @interface ContextConfiguration {
 2   
 3       @AliasFor("locations")
 4       String[] value() default {};
 5   
 6       @AliasFor("value")
 7       String[] locations() default {};
 8   
 9       // ...
10    }
示例2:元注释中属性的显式别名
在@XmlTestConfig中,xmlFiles是@ContextConfiguration中位置的显式别名。换句话说,xmlFiles覆盖@ContextConfiguration中的locations属性。
1  @ContextConfiguration
2    public @interface XmlTestConfig {
3   
4       @AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
5       String[] xmlFiles();
6    }
示例3:注释中的隐式别名
在@MyTestConfig中,value、groovyscript和xmlFiles都是@ContextConfiguration中locations属性的显式元注释属性重写。因此,这三个属性也是彼此的隐式别名。
 1  @ContextConfiguration
 2    public @interface MyTestConfig {
 3   
 4       @AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
 5       String[] value() default {};
 6   
 7       @AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
 8       String[] groovyScripts() default {};
 9   
10       @AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
11       String[] xmlFiles() default {};
12    }

 

 

标签:ContextConfiguration,别名,注释,value,注解,AliasFor,属性
From: https://www.cnblogs.com/midiyu/p/16769903.html

相关文章

  • springboot项目编译时,使用自定义注解类找不到符号
    springboot项目编译时,使用自定义注解类找不到符号Java项目编译时,使用自定义注解类找不到符号Spring-boot项目编辑器:idea问题:编译时找不到符号。项目中用到了自定义注解类......
  • 2022-10-08 注解开发
    目录spring注解开发定义beanSpring提供@Component注解的三个衍生注解纯注解开发bean作用范围依赖注入加载properties文件第三方管理使用独立的配置类管理第三方bean方法一:......
  • MyBatis框架:第七章:注解使用方式和参数传递及#{}和${}
    myBatis的注解使用方式(了解。主要使用xml)注解的使用示例:publicinterfaceUserMapperAnnotation{@Select(“selectid,last_nameuserName,sexfromt_userwhereid......
  • 源码角度了解Skywalking之@Trace注解的原理
    源码角度了解Skywalking之@Trace注解的原理@Trace要解决的问题是收集一些关键业务的Trace信息,使用方法就是在需要收集Trace信息的方法上添加@Trace注解就可以了。使用@Tr......
  • 2、spring+mybatis注解(无mapper实现类)+idea+maven
    1、在idea中配置database连接数据库,用来在idea中编写sql脚本操作数据库         2、sql详细脚本如下:1--1.创建部门表2createtabledept3(4deptnoint......
  • Spring事务(二)-@Transactional注解
    上一节说了Spring的事务配置,其中,声明式事务配置里有5种配置方式,@Transactional注解应该是最为常用的一种方式了。这一节就说说@Transactional注解。@Transactional注解......
  • SpringAOP之通过注解方式实现
    通过注解的方式1)导入jar包<!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.3.Release</ve......
  • 大聪明教你学Java | Spring Boot 使用自定义注解实现防止表单重复提交
    前言这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战表单重复提交是在多用户的Web应用中最常见且带来麻烦最多的一个问题。有很多的应用场景都会遇到......
  • java注解与反射--3
    java注解与反射--3类的加载与ClassLoaderjava内存堆存放new的对象和数组可以被所有的线程共享,不会存放别的对象引用栈存放基本变量类型引用对象的变量方法......
  • java注解
    java注解和反射--1所有框架的一个底层注解:java.Annotation1.1什么是注解JDK5.0引入的新技术Annotation的作用:不是程序本身,可以对程序做出解释可以被其他程序读取......