Spring Boot @Enable*注解源码解析及自定义@Enable*

时间:2024-01-28 14:04:23

Spring Boot @Enable*注解源码解析及自定义@Enable*

  Spring Boot 一个重要的特点就是自动配置,约定大于配置,几乎所有组件使用其本身约定好的默认配置就可以使用,大大减轻配置的麻烦。其实现自动配置一个方式就是使用@Enable*注解,见其名知其意也,即“使什么可用或开启什么的支持”。

Spring Boot 常用@Enable*

首先来简单介绍一下Spring Boot 常用的@Enable*注解及其作用吧。

  1. @EnableAutoConfiguration 开启自动扫描装配Bean,组合成@SpringBootApplication注解之一

  2. @EnableScheduling 开启计划任务的支持

  3. @EnableTransactionManagement 开启注解式事务的支持。

  4. @EnableCaching 开启注解式的缓存支持。

  5. @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持。

  6. @EnableEurekaServer 开启Euraka Service 的支持,开启spring cloud的服务注册与发现

  7. @EnableDiscoveryClient 开启服务提供者或消费者,客户端的支持,用来注册服务或连接到如Eureka之类的注册中心

  8. @EnableFeignClients 开启Feign功能

还有一些不常用的比如:

  1. @EnableAsync 开启异步方法的支持

  2. @EnableWebMvc 开启Web MVC的配置支持。

  3. @EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持。

  4. @EnableJpaRepositories 开启对Spring Data JPA Repository的支持。

参考:http://tangxiaolin.com/learn/show?id=402881d2648c88cc01648c89d8730001

@Enable*的源码解析

查看它们的源码

@EnableAutoConfiguration

在这里插入图片描述

@EnableCaching 开启注解式的缓存支持。

在这里插入图片描述

@EnableDiscoveryClient(@EnableEurekaServer 也是使用了这个组合注解) 开启服务提供者或消费者,客户端的支持,用来注册服务或连接到如Eureka之类的注册中心

在这里插入图片描述

@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持。

在这里插入图片描述

@EnableFeignClients 开启Feign功能

在这里插入图片描述

@EnableScheduling(这个比较特殊,为自己直接新建相关类,不继承Selector和Registrar) 开启计划任务的支持

在这里插入图片描述

源码规律及解析

可以发现它们都使用了@Import注解(其中@Target:注解的作用目标,@Retention:注解的保留位置,@Inherited:说明子类可以继承父类中的该注解,@Document:说明该注解将被包含在javadoc中)

该元注解是被用来整合所有在@Configuration注解中定义的bean配置,即相当于我们将多个XML配置文件导入到单个文件的情形。

而它们所引入的配置类,主要分为Selector和Registrar,其分别实现了ImportSelectorImportBeanDefinitionRegistrar接口,

ImportSelector接口源码

ImportBeanDefinitionRegistrar接口源码

两个的大概意思都是说,会根据AnnotationMetadata元数据注册bean类,即返回的Bean 会自动的被注入,被Spring所管理。

既然他们功能都相同,都是用来返回类,为什么 Spring 有这两种不同的接口类的呢?

其实刚开始的时候我也以为它们功能应该都是一样的,后面我在组内分享的时候,我的导师就问了我这个问题,然后当时我没有留意这个点所以答不出来