Spring Boot @Enable*注解源码解析及自定义@Enable*
Spring Boot 一个重要的特点就是自动配置,约定大于配置,几乎所有组件使用其本身约定好的默认配置就可以使用,大大减轻配置的麻烦。其实现自动配置一个方式就是使用@Enable*注解,见其名知其意也,即“使什么可用或开启什么的支持”。
Spring Boot 常用@Enable*
首先来简单介绍一下Spring Boot 常用的@Enable*注解及其作用吧。
-
@EnableAutoConfiguration
开启自动扫描装配Bean,组合成@SpringBootApplication注解之一
-
@EnableScheduling
开启计划任务的支持
-
@EnableTransactionManagement
开启注解式事务的支持。
-
@EnableCaching
开启注解式的缓存支持。
-
@EnableAspectJAutoProxy
开启对AspectJ自动代理的支持。
-
@EnableEurekaServer
开启Euraka Service 的支持,开启spring cloud的服务注册与发现
-
@EnableDiscoveryClient
开启服务提供者或消费者,客户端的支持,用来注册服务或连接到如Eureka之类的注册中心
-
@EnableFeignClients
开启Feign功能
还有一些不常用的比如:
-
@EnableAsync
开启异步方法的支持
-
@EnableWebMvc
开启Web MVC的配置支持。
-
@EnableConfigurationProperties
开启对@ConfigurationProperties注解配置Bean的支持。
-
@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,其分别实现了ImportSelector
和ImportBeanDefinitionRegistrar
接口,
两个的大概意思都是说,会根据AnnotationMetadata元数据注册bean类,即返回的Bean 会自动的被注入,被Spring所管理。
既然他们功能都相同,都是用来返回类,为什么 Spring 有这两种不同的接口类的呢?
其实刚开始的时候我也以为它们功能应该都是一样的,后面我在组内分享的时候,我的导师就问了我这个问题,然后当时我没有留意这个点所以答不出来