springboot中的@AliasFor

阅读数:164 评论数:0

跳转到新版页面

分类

python/Java

正文

一、概述

AliasFor是一个注解,用于为注解属性声明别名。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AliasFor {
    @AliasFor("attribute")
    String value() default "";
 
    @AliasFor("value")
    String attribute() default "";
 
    Class<? extends Annotation> annotation() default Annotation.class;
}

它有两个属性value和attribute,二者互为别名。

二、使用场景

1、把多个元注解的属性组合在一起形成新的注解。

比如我们熟悉的@SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM,
				classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
 
	
	@AliasFor(annotation = EnableAutoConfiguration.class)
	Class<?>[] exclude() default {};
 
	
	@AliasFor(annotation = EnableAutoConfiguration.class)
	String[] excludeName() default {};
 
	
	@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
	String[] scanBasePackages() default {};
 
	@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
	Class<?>[] scanBasePackageClasses() default {};
 
}

如上所示@SpringBootApplication并没有定义新的属性而是复用其他注解已有的注解属性并对其进行组合形成新的注解从而达到便捷的目的。

所以在使用SpringBoot时我们只需要@SpringBootApplication一个注解就能开启自动配置、自动扫描的功能。而不再需要使用后面三个注解来达到同样的目的:@Configuration、@ComponentScan、@EnableAutoConfiguration。

2、继承注解

如@Controller、@Service、@Repository都继承了@Component的功能,它们的基本作用和@Component完全一样都是标明某个类是Spring的Bean,需要Spring容器进行管理。不同之处在于对Spring Bean进行了归类,从而能对不同类型的Bean进行不同的处理。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
 
	@AliasFor(annotation = Component.class)
	String value() default "";
 
}

3、在同个注解中为同一个功能定义两上名称不一样的属性,那么这两个属性彼此互为别名。

 
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
 
	
	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 {};
 
}
 

这么做的目的在于:

(1)更便捷

当匀们只定义一个属性的时候往往可以省略属性名如:

@RequestMapping("/user")

(2)更容易思解

 

 




相关推荐

一、request uri部分 @PathVariable 获取路径参数,形如url/{id} 二、request header部分 @RequestHeade

一、概述 一个项目使用多个数据库(无论是主从复制--读写分离还是分布式数据库结构)的重要性变得越来越明显,整合的多数据源有两种方式:分包和aop。 1、SqlSessionTemplate SqlSe

一、概述 PageHelper是开源免费的mybatis第三方分页插件。 二、使用 1、pom引入 <dependency> <groupId>com.github.pageh

一、日志框架的介绍 Spring Boot 2.*默认采用slf4j+logback的形式,slf4j是个通用的日志门面,logback就是个具体的日志框架了。

一、问题解决方式 @PostMapping("/insert") @ResponseBody private ResultVO insert1(@RequestParam Map<String, St

JJWT 全称Java Json Web Token。 而JWT是一种在两方之间传输信息的方法,在jwt的主体中编码的信息被称为claims。jwt的扩展形式是json,因此每个c

POM依赖 &lt;dependency&gt; &lt;groupId&g

一、概述 @EnableConfigurationProperties注解的作用是:让使用了@ConfigurationProperties注解的类生效,并且将该类注入到IOC容器中,交由IOC容器进

一、概述 Druid(德鲁伊)是Java语言中的数据库连接池,Spring Boot 2.x默认使用Hikari数据源,虽然HikariCP的速度稍快,但是,Druid能够提供强大的监控和扩展功能。

1、配置文件的格式 springboot可以识别两种格式的配置文件,分别是yml文件与properties文件,我们可以将application.properties文件换成a