alias java_【java】【spring】源码分析,@AliasFor互为别名

在spring中,最常见的一个注解AliasFor

它的作用就是多个属性互为别名

packageorg.springframework.core.annotation;importjava.lang.annotation.Annotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.METHOD})

@Documentedpublic @interfaceAliasFor {

@AliasFor("attribute")

String value()default "";

@AliasFor("value")

String attribute()default "";

Class extends Annotation> annotation() default Annotation.class;

}

就是说attribute和value的值是一样的,互为别名

为什么需要互为别名呢?

原因是当使用注解时,注解有value()属性,不指明具体名称时就默认是value

我们常见的就是springMVC里面的@RequestMapping

一般用@RequestMapping("xxx")

这里默认就是@RequestMapping(value = "xxx")

看RequestMapping源码,看到value和path是互为别名,如果不是互为别名,那么就要这样写@RequestMapping(path = "xxx")。就会显得很麻烦

packageorg.springframework.web.bind.annotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;importorg.springframework.core.annotation.AliasFor;

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Mappingpublic @interfaceRequestMapping {

String name()default "";

@AliasFor("path")

String[] value()default{};

@AliasFor("value")

String[] path()default{};

RequestMethod[] method()default{};

String[] params()default{};

String[] headers()default{};

String[] consumes()default{};

String[] produces()default{};

}

这里说明value()并不是注解必须属性,互为别名一般不用两个都赋值,如果两个一起赋值,必须一样不然报错。互为别名一定要设置默认值,而却默认值一定相同

属性annotation(),指定属性是继承某注解

当不用此属性时,自定义一个注解,两个属性互为别名,是这样表示。annotation缺省指明继承的父注解的中的属性名称,则默认继承父注解中同名的属性名

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Configuration

@interfaceMyBean {

@AliasFor("value")

String beanName()default "";

@AliasFor("beanName")

String value()default "";

}

当使用此属性时,也可以这样互为别名

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Configuration

@interfaceMyBean {

@AliasFor(value= "value", annotation = Configuration.class)

String beanName()default "";

@AliasFor(annotation= Configuration.class)

String value()default "";

}

看Configuration源码

packageorg.springframework.context.annotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;importorg.springframework.core.annotation.AliasFor;importorg.springframework.stereotype.Component;

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Componentpublic @interfaceConfiguration {

@AliasFor(

annotation= Component.class)

String value()default "";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值