SpringBoot2.0 自动配置的核心

1.新建项目

这个就由读者自己去建(可以参考https://mp.csdn.net/postedit/83375675 idea快速配置)

2.查看项目结构并解析

发现建好之后只有一个类可以使用,那为什么Springboot可以自动配置这么多东西列。我们从@SpringBootApplication这个注解上一探究竟吧。

当我们点进去之后发现如下:

发现里面有一个注解@EnableAutoConfigure(激活自动配置) 相信大家一看就知道了是什么意思,我们在点进去看看

它导入了AutoConfigurationImportSelector(自动配置输入选择器)这个类,我们进去看看,就会看见selectImpors()这个方法。
通过debug发现,代码中有个集合包含了xxxAutoConfiguration,然后把这个集合变成string数组返回。

既然上图返回的集合是调用的getCandidateConfigurations(annotationMetadata,attributes),我们再跟踪着看下

这个方法SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader())传了两个参数第一个参数是:EnableAutoConfiguration.class,第二个是类加载器。我们在继续跟踪如下:

可以看到Springboot加载了类路径下的META-INF/spring.factories,我们去找找可以看到如下:

可以看到上面全部是springboot自动加载的配置类。

我随便找一个看看,我这里看的是RedisAutoConfiguration,看看redis是如何配置的

上面的配置也很简单

@Configuration :表示这个类是一个配置类,写springboot项目肯定写过这个注解

@ConditionalOnClass(RedisOperations.class) : 表示RedisOperations存在则启用这个配置。@Conditional不熟悉的可以百度下。这里就不细说了。
@EnableConfigurationProperties(RedisProperties.class) :RedisProperties这个类中初始化了redis的一些配置参数。springboot整合过redis的读者,对下图的配置应该就非常熟悉了,我们在yml或者properties中写的配置就是这个类的熟悉。
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) :表示导入redis连接的配置

springboot的自动配置原理就是根据AutoConfigurationImportSelector先加载spring-boot-autoconfigure.jar中类路径下的spring.factories的xxxAutoConfiguration一些配置。也可以根据xxxProperties类中的属性根据自己项目的需要改变值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值