关于springboot:springboot之核心原理二

46次阅读

共计 2054 个字符,预计需要花费 6 分钟才能阅读完成。

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 包下的配置, 找到实现类进行装载实例化

正文完
 0