在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 "";
}