springboot(四):springboot自动配置原理

springboot执行启动类后,为什么我们就可以直接使用http://localhost:8080/访问了呢?

我们查看启动类,发现特别的地方有两个:

        注解:@SpringBootApplication

       run方法:SpringApplication.run()

我们先看看注解@SpringBootApplication

在启动类上有注解@SpringBootApplication,查看@SpringBootApplication源码

springboot(四):springboot自动配置原理

从上面的源码我们主要看看@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。

1、@SpringBootConfiguration

查看@SpringBootConfiguration源码

springboot(四):springboot自动配置原理

从@SpringBootConfiguration源码可以看到,在这个注解的上面有@Configuration注解,这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,并且读取其中的配置信息。而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。

2、@EnableAutoConfiguration

查看@EnableAutoConfiguration源码

springboot(四):springboot自动配置原理

接着查看AutoConfigurationImportSelector类

springboot(四):springboot自动配置原理

在AutoConfigurationImportSelector类中我们找到selectImports方法,在这个方法中查看调用的getCandidateConfigurations方法

springboot(四):springboot自动配置原理

其中,SpringFactoriesLoader.loadFactoryNames 方法的作用就是从META-INF/spring.factories文件中读取指定
类对应的类名称列表。在这个方法出错时,会显示found in META-INF/spring.factories。

我们接着找到这个包(即:org.springframework.boot.autoconfigure)下面对应的META-INF/spring.factories文件,打开这个文件我们可以看到,spring.factories 文件中有关自动配置的配置信息,如:mvc的自动配置

springboot(四):springboot自动配置原理

以下就以mvc为例看一看

在spring.factories 文件中找到WebMvcAutoConfiguration,进入源码

springboot(四):springboot自动配置原理

查看WebMvcProperties源码,找到了内部资源视图解析器的prefix和suffix属性。

springboot(四):springboot自动配置原理

ResourceProperties中主要定义了静态资源(.js,.html,.css等)的路径:

springboot(四):springboot自动配置原理

此外,在WebMvcAutoConfiguration源码中,找到视图解析器相应的源码

springboot(四):springboot自动配置原理

处理器适配器(HandlerAdapter):

springboot(四):springboot自动配置原理

3、@ComponentScan

查看@ComponentScan源码

springboot(四):springboot自动配置原理

通过源码的注释我们可以了解到,这个注解的作用是配置组件扫描的指令,扫描的包是该类所在包及其子包。

所以,在我们写启动类时,一般都会放在一个比较前的包目录中。