1.基于你对springboot的了解形容一下什么是springboot

它是一个服务于spring框架的框架,可能简化配置文件,疾速构建web利用,
内置tomcat,无需打包部署,间接运行。

2.约定优于配置指的是什么?

maven 的目录构造
a). 默认有 resources 文件夹寄存配置文件
b). 默认打包形式为: jar
spring-boot-starter-web 中默认蕴含 spring mvc 相干依赖以及内置的 tomcat 容器,使得构建一个 web 利用更加简略
默认提供 application.properties/yml 文件
默认通过 spring.profiles.active 属性来决定运行环境时读取的配置文件
EnableAutoConfiguration 默认对于依赖的 starter 进行主动

3.@SpringBootApplication由哪几个注解组成,这几个注解别离示意什么作用

SpringBootApplication 实质上是由 3 个注解组成,别离是

@Configuration
@EnableAutoConfiguration
@ComponentScan
@Configuration:
在启动类外面标注了@Configuration,意味着它其实也是一个 IoC
容器的配置类

@EnableAutoConfiguration:
springboot 利用把所有符合条件的@Configuration 配置
都加载到以后 SpringBoot 创立并应用的 IoC 容器中。

@ComponentScan:
ComponentScan 默认会扫描以后 package 下的的所有加
了@Component 、@Repository、@Service、@Controller的类到 IoC 容器中;

4.springboot主动拆卸的实现原理


如果是之前的spring中应用redis须要在xml定义bean,当初只须要依赖一个spring-boot-starter-data-redis
的jar包,jar中定义了RedisConfiguration,当启动的时候spring会主动装载RedisConfiguration,那spring是如何晓得配置类在哪里的呢?RedisConfiguration类的门路放在了classpath*META-INF/spring.factories的文件中,spring会加载这个文件中配置的configuration

(1)SpringApplication.run(AppConfig.class,args);执行流程中有refreshContext(context);
(2)refreshContext(context);外部会解析咱们的配置类上的标签.实现主动拆卸性能的注解@EnableAutoConfiguration
(3)会解析@EnableAutoConfiguration这个注解外面的@Import引入的配置类.AutoConfigurationImportSelector
(4)AutoConfigurationImportSelector这个类中有这个办法. SpringFactoriesLoader.
(5)SpringFactoriesLoader.loadFactoryNames的作用就是读取jar包中的/我的项目中的META-INF/spring.factories文件.
(6)spring.factories配置了要主动拆卸的Configuration类

5.spring中的spi机制的原理是什么?

SPI的全名为Service Provider Interface,为某个接口寻找服务实现的机制。
当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创立一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当内部程序拆卸这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,实现模块的注入。通过这个约定,就不须要把服务放在代码中了,通过模块被拆卸的时候就能够发现服务类了。

在springboot的主动拆卸过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜查所有META-INF/spring.factories配置文件,而后将解析properties文件,找到指定名称的配置后返回。须要留神的是,其实这里不仅仅是会去ClassPath门路下查找,会扫描所有门路下的Jar包,只不过这个文件只会在Classpath下的jar包中。

通过spi技术能够自定义starter,在自定义的配置文件META-INF/spring.factories中退出实现类,依赖这个starter的我的项目就会扫描jar包下的配置,找到实现类进行装载实例化