1

背景分析

我们在搭建项目的时候,需要用到很多很多的冗余的配置文件,当我们的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的注解
image.png
这个注解,手动狗头翻译过来的意思应该是:“使能够自动配置”,好吧,那我们又继续往里面走
image.png
此时进入到了“使能够自动配置”的注解里面,那么我们可以发现,它的上方,导入了一个class文件,又来手动狗头翻译:“自动配置导入选择器”,看起来有点儿像那么回事了哈,然后我们继续跟进进去,image.png,此时,我们全靠猜,可能进行不通了,像我这种菜鸟,近500行的源码,看起来还是比较吃力的,于是,好吧,我们此时在这个类里面的搜索spring.factories,然后会找到一个getCandidateConfigurations方法,
image.png
那么这个时候我们看这个方法的注释大致意思可以发现,它会返回一个自动配置的类名,其实我们会发现这个方法里面会通过Spring工厂加载器和加载工厂名去根据bean的类加载器和Spring工厂类加载器去获取一个配置的集合,然后再去断言获取到的配置不为空就执行这些配置,如果为空,就抛出一个没找到的信息,请注意这里的没找到,我们再细看,它会从spring.factories里面去找,那么现在我们就又有线索了,于是可以按两下Shift,然后找这个文件
image.png
此时会发现,根本什么都没有,请不要气急败坏,先把你的右上角Include non-project items选中,就会出现和我如下图片一样多的选择,此时,不要乱点,切记,只选正确的,我已经框起来的了,要注意路径
image.png
然后我们进去之后,就会发现,这就是一个spring自己的配置文件,并且,有一个大大的自动配置字样
image.png
这里,其实就是spring将所有的自动配置文件都加载到这里,我们以视图解析器为例来看一下,此时,我们会发现根本就找不到InternalResourceViewResolver,注意注意,不要慌张,既然springboot要整合,那肯定要重写这个类嘛,就像我们写拦截器什么的,都会根据自己的需求来写具体的代码,springboot也是一样,我们可以搜ThymeleafTemplateAvailabilityProvider,为什么要搜这个呢?因为springboot用的模板技术是Thymeleaf,SSM里面用的是jsp技术,这个是不一样的地方,所以springboot的视图解析器命名也是根据Thymeleaf来的,此时,我们进入这个类里面可以看到image.png
默认的前后缀,然后再进入ThymeleafProperties类可以看到具体的前后缀了
image.png

结语

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


Arvinaa
9 声望1 粉丝