转载

16. SpringBoot自动配置流程分析

背景分析

我们在搭建项目的时候,需要用到很多很多的冗余的配置文件,当我们的ide如果是IntelliJ IDEA还好,因为有强大的代码提示,但是如果ide是eclipse或者myeclipse,很可能会被这些配置文件搞得很惨,当然,大牛除外,当然,也可能只是我自己的问题哈。那么此时,Spring公司出了一款专门用于集成项目的框架SpringBoot,而这款框架对我来说哈,牛逼之处就在于各种自动配置,帮我们解决了前端控制器、视图解析器等一系列的配置文件,不需要自己再去做配置。

此时,我们只需要写一个Java类,在类上写一个注解,就可以全部都实现。

思路分析

首先我们在主配置文件上面会加一个注解

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

那么此时我们跟进到 @SpringBootApplication 这个注解上方有一个 @EnableAutoConfiguration 的注解

16. SpringBoot自动配置流程分析

这个注解,手动狗头翻译过来的意思应该是:“使能够自动配置”,好吧,那我们又继续往里面走

16. SpringBoot自动配置流程分析

此时进入到了“使能够自动配置”的注解里面,那么我们可以发现,它的上方,导入了一个class文件,又来手动狗头翻译:“自动配置导入选择器”,看起来有点儿像那么回事了哈,然后我们继续跟进进去, 16. SpringBoot自动配置流程分析 ,此时,我们全靠猜,可能进行不通了,像我这种菜鸟,近500行的源码,看起来还是比较吃力的,于是,好吧,我们此时在这个类里面的搜索 spring.factories ,然后会找到一个 getCandidateConfigurations 方法,

16. SpringBoot自动配置流程分析

那么这个时候我们看这个方法的注释大致意思可以发现,它会返回一个自动配置的类名,其实我们会发现这个方法里面会通过Spring工厂加载器和加载工厂名去根据bean的类加载器和Spring工厂类加载器去获取一个配置的集合,然后再去断言获取到的配置不为空就执行这些配置,如果为空,就抛出一个 没找到 的信息,请注意这里的没找到,我们再细看,它会从 spring.factories 里面去找,那么现在我们就又有线索了,于是可以按两下 Shift ,然后找这个文件

16. SpringBoot自动配置流程分析

此时会发现,根本什么都没有,请不要气急败坏,先把你的右上角 Include non-project items 选中,就会出现和我如下图片一样多的选择,此时,不要乱点,切记,只选正确的,我已经框起来的了,要注意路径

16. SpringBoot自动配置流程分析

然后我们进去之后,就会发现,这就是一个spring自己的配置文件,并且,有一个 大大 的自动配置字样

16. SpringBoot自动配置流程分析

这里,其实就是spring将所有的自动配置文件都加载到这里,我们以视图解析器为例来看一下,此时,我们会发现根本就找不到 InternalResourceViewResolver ,注意注意,不要慌张,既然springboot要整合,那肯定要重写这个类嘛,就像我们写拦截器什么的,都会根据自己的需求来写具体的代码,springboot也是一样,我们可以搜 ThymeleafTemplateAvailabilityProvider ,为什么要搜这个呢?因为springboot用的模板技术是 Thymeleaf ,SSM里面用的是jsp技术,这个是不一样的地方,所以springboot的视图解析器命名也是根据 Thymeleaf 来的,此时,我们进入这个类里面可以看到 16. SpringBoot自动配置流程分析

默认的前后缀,然后再进入 ThymeleafProperties 类可以看到具体的前后缀了

16. SpringBoot自动配置流程分析

结语

到这里,基本也就结束了,像SSM需要我们手动配置的前端控制器、之类的,都在这里面,内容不一样,但是原理都是一样的。谨以此文献给我自己,以及需要的人,哈哈哈哈

ps:写得不好,少喷将就看

原文  https://segmentfault.com/a/1190000022307071
正文到此结束
Loading...