1.SpringBoot核心功能的起步依赖实现原理?
实现原理是依赖传递。
在spring-boot-starter-parent又依赖spring-boot-dependencies,其中定义了各种技术的版本信息,组合了一套最优搭配的技术版本
在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包并且不会存在版本冲突等问题。

2.SpringBoot核心功能的自动配置实现原理?
首先,所有的springboot项目的有一个启动类,这个类上有一个注解@SpringBootApplication,这个注解是一个组合注解,包含其他的三个注解,其中有一个注解@EnableAutoConfiguration是实现自动配置的关键。

这个注解通过@Import注解引入了一个类AutoConfigurationImportSelector,这个类中有一个方法,从项目的META-INF/spring.factores中读取需要加载的配置类

这些配置类比较多,大概120+个,启动的时候并不会全部加载,而是根据配置类中的条件注解@ConditionalOnXxx去判断是否加载,配置类中包含了@Configuration+@Bean注解,可以把需要用的Bean对象放到容器中,简化开发配置类的编写。

在开发中,我们在整合一些第三方技术时就可以使用这种方式,比如短信服务。通过封装发送短信的业务功能,并配置好META-INF/spring.factores
其他服务在使用的时候直接引入依赖就可以使用。

3.SpringBoot的常见配置文件的类型有哪些?
.properties
.yml
.yaml

4.读取SpringBoot配置文件的三种方式是什么?
@Value 读取少量的参数
@ConfigurationProperties+prefix+实体类 批量读取配置
@通过封装好的Environment类读取
5.Spring、SpringBoot与SpringCloud之间的关系?
Spring是Spring家族中最基础的也是最核心的一个框架,它包含两大核心模块
IOC/DI
AOP
AOP底层实现:动态代理–》引出:JDK动态代理和CGLIB动态代理的区别
AOP应用:AOP在项目中如何使用,全局异常处理、日志技术
SpringBoot用来快速构建Spring环境,解决了Spring配置繁琐和依赖导入复杂的问题,两大特色
起步依赖
自动配置
SpringCloud实际上并不是一个框架,他是一些微服务组件的集合,用来解决微服务中遇到的一些问题,这些组件如
注册中心、远程调用、配置中心、服务网关、分布式事务、分布式缓存等等,并且这些组件都是基于SpringBoot来构建的,利用了SpringBoot的特性降低了组件使用的门槛,实现开箱即用的友好体验。

6.Nacos配置中心和SpringBoot的application.yml配置了相同的属性,最终那个生效?
优先级: project.yml(nacos上的)> application.yml(本地的)>bootstrap.yml(本地的)

更多推荐

面试八股文---springboot