1、什么是 Spring Boot?为什么要用 Spring Boot?
2、SpringBoot的核心配置文件有那几个?它们的区别是什么?
- SpringBoot的核心配置文件有application和bootstarp配置文件
- 区别
(1) application文件主要用于Springboot自动化配置文件。
(2) 一些固定的不能被覆盖的属性
(3)一些加密/解密的场景
3、SpringBoot的配置文件有哪几种格式?它们有什么区别?
- SpringBoot的配置文件两种格式:xxx.properties文件,xxx.yml文件。
- 两种文件的区别:
(1) .properties 文件中的内容是key=value的格式,.yml文件中的内容是 key:value格式
(2) yml 有空格要求,层级严格,加载属性有顺序,不支持@PropertySource注解导入配置
4、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- SpringBoot的核心注解是@SpringBootApplication
- 该注解组成
(1) @Configuration:等同于spring的XML配置文件文件;使用
(2) @EnableAutoConfiguration:开启自动配置
(3) @ComponentScan:组件扫描,可自动发现和装配一些Bean
5、开启 Spring Boot 特性有哪几种方式
- 继承spring-boot-starter-parent项目
- 导入spring-boot-dependencies项目依赖
6、Spring Boot 需要独立的容器运行吗
- 不需要,内嵌Tomcat/Jetty服务器
7、运行 Spring Boot 有哪几种方式?
- 运行方式的详细参考链接
- 运行带有main方法类
- 通过命令行 java -jar 的方式
- 通过spring-boot-plugin的方式
8、SpringBoot自动配置原理
①、springboot启动类上有@SpringBootApplication注解,该注解是一个复合注解(派生注解),其中就有@EnableAutoConfiguration开启自动配置的注解。
②、@EnableAutoConfiguration注解也是一个派生注解,其中的关键功能由@Import(AutoConfigurationImportSelector.class)提供。
③、AutoConfigurationImportSelector.class中有selectImports()方法,具体实现如下
一路查找到 -> 关键代码处:SpringFactoriesLoader.loadFactoryNames()
通过SpringFactoriesLoader.loadFactoryNames() 扫描所有具有META-INF/spring.factories的jar包,把扫描到的这些文件的内容包装成properties对象从properties中获取EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中。
至此,@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。
精髓:
1)、SpringBoot启动会加载大量的自动配置类
2)、我们的关注点是自己需要的功能有没有SpringBoot默认写好的自动配置类;
3)、再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;
xxxxAutoConfigurartion:自动配置类;
给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
9、Spring Boot 的目录结构是怎样的