SpringBoot自动配置原理

本文将通过代码,解读SpringBoot自动配置的原理。在学习自动配置之前,首先要先理解什么是SpringBoot的自动配置?

我们知道,SpringBoot是一种方便开发者开发应用程序的框架,可以用尽可能少的配置(即习惯优于配置)进行开发,这是在Spring4.X后出现的。通过这种习惯优于配置的方式,我们可以很轻松集成各种如注册中心,消息组件,redes等主流的框架到我们的应用当中(可以理解为可以轻松集成一个个组件框架的starter),但是很显然每一个组件框架能被轻松集成到应用中,其背后就是SpringBoot帮我们自动完成了一些约定俗成的配置并将其发布,下面就让我们研究一下SpringBoot是怎么实现自动配置的,以及都有哪些可以自动配置的框架。

(一)SpringBoot自动配置原理之启动类@SpringBootApplication

通过前面简单应用的样例,我们知道只需要通过一个添加了@SpringBootApplication注解的配置启动类,就可以完成自动配置,那么很明显自动配置的操作应该是在@SpringBootApplication这个注解当中。

让我们看看这个@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) })

其中,最后3个注解是最重要的注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。

对于@SpringBootConfiguration实际上是一个配置类注解@SpringBootConfiguration,也就是表明这个类是一个配置类;

对于@ComponentScan我们前面应用文章也知道这是包扫描注解,会默认扫描当前配置类所在包及子包下的所有文件类:

其中带了(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) 表示在扫描过程中,会忽视所有实现了TypeExcludeFilter接口以及AutoConfigurationExcludeFilter接口的类,这两种类型本身实现了TypeFilter接口,而TypeFilter接口实现类就是指需要剔除不加载的类,因此参数就是进行剔除跳过指定类扫描的意思;

对于@EnableAutoConfiguration,这个顾名思义就是我们要重点了解的“自动配置”注解了。

那么这个@EnableAutoConfiguration又是一个实现什么功能含义的注解呢?点开这个注解查看:

可以看到,这个注解通过@Import引入了一个非常关键的类

AutoCo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值