Spring Boot 中的自动配置

Spring Boot 中的自动配置

SpringBoot 启动的时候,会有大量的自动配置的类加载到容器中。正是因为 SpringBoot 的这些自动配置,使得我们在编程的时候,不像 Spring MVC 那样还需要关注各种配置,开发者只需要专心的关注业务代码。

SpringBoot 中的@EnableAutoConfiguration 注解,表示实现自动配置。通常不直接使用该注解,而是通过注解@SpringBootApplication 使用它,@SpringBootApplication 注解包含了@EnableAutoConfiguration 注解。

@EnableAutoConfiguration 注解定义源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
 
	String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
 
	/**
	 * Exclude specific auto-configuration classes such that they will never be applied.
	 * @return the classes to exclude
	 */
	Class<?>[] exclude() default {};
 
	/**
	 * Exclude specific auto-configuration class names such that they will never be
	 * applied.
	 * @return the class names to exclude
	 * @since 1.3.0
	 */
	String[] excludeName() default {};
}

定义中出现了@AutoConfigurationPackage 注解,该注解的作用就是将主配置类(即@SpringBootApplication 标注的类)所在的包及其子包里的所有类都纳入 Spring 容器。从源码中可以看到它标注了一个@Import 注解,该注解是 Spring 的底层注解。它给容器中导入一个组件 (AutoConfigurationImportSelector.class)。

AutoConfigurationImportSelector 确定了导入哪些组件到选择器。该类中有个方法 selectImports,返回了一个 String 数组,其中内容就是需要导入的组件的全类名,这些组件会被自动添加到 Spring 容器。

我们可以在 spring-boot-autoconfigure.jar 中查看具体导入了哪些组件,spring-boot-autoconfigure.jar 有一个 META-INF/spring.factories,这个文件中定义了需要导入的配置类。

spring.factories 中的内容如下:

继续展开,看到这里包含了大量的自动配置类,有了这些自动配置类就能帮我们自动配置好相关内容,简化开发,提高效率。

SpringBoot 的自动配置原理并不复杂,它大量的使用了条件注解@Conditional,该注解可以根据不同的条件状态来判断是否需要自动配置。想深入了解的话,可以百度一些文章,分析的比较详细。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿天地

spring boot整合dubbox进行服务拆分

Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并...

1.6K10
来自专栏搜云库

Spring Boot 中使用 MyBatis 整合 Druid 多数据源

本文将讲述 spring boot + mybatis + druid 多数据源配置方案。 环境 CentOs7.3 安装 MySQL 5.7.19 二进制版本...

3437
来自专栏用户2442861的专栏

[置顶] Python logging模块详解

WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical ...

952
来自专栏技术墨客

Spring核心——官配后置处理器 原

RequiredAnnotationBeanPostProcessor它用于处理@Required注解。当我们一个Setter方法加入@Required后,表示...

632
来自专栏yukong的小专栏

【SpringBoot2.0系列08】SpringBoot之redis数据缓存管理目标实现

【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板

2832
来自专栏个人分享

RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的...

2432
来自专栏SpringSpace.cn

使用 Kotlin 和Spring Boot 2.0快速开发REST API接口 顶

凭借Kotlin的幽雅,还有Spring Boot 2.0的简洁,可以通过简单几行代码实现大流量数据接口,同时具备背压处理能力,下面用一个简单的示例介绍接口实现...

1282
来自专栏菩提树下的杨过

spring cloud 学习(1) - 基本的SOA示例

有过dubbo/dubbox使用经验的朋友,看到下面这张图,一定很熟悉,就是SOA架构的最基本套路。 ? 与dubbo对比,上图的3大要素中,spring cl...

3118
来自专栏battcn

一起来学Spring Cloud(F版) | 第三篇:注解式HTTP请求Feign

注解式的 Feign 使得 Java HTTP 客户端编写更方便。Feign 灵感来源于安卓网络编程框架 Retrofit、JAXRS-2.0 和 WebSoc...

1662
来自专栏JavaWeb

项目中Spring 声明式事务使用的一些坑点分析01

7508

扫码关注云+社区

领取腾讯云代金券