java 培训:SpringBoot 高频面试考点分享
1、什么是 SpringBoot?
回答:随着动态语言的流行,Java 的开发显得格外的笨重:繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大.
SpringBoot 应运而生.
它使用"习惯优于配置"(项目中存在大量的配置,此外还内置一个习惯性配置,让你无需手动进行配置)的理念让你的项目快速运行起来.使用 SpringBoot 很容易创建一个独立运行(运行 Jar 内嵌 Servlet 容器)准生产级别的基于 Spring 框架的项目,使用 SpringBoot 你可以不用或者只需要很少的 Spring 配置。
追问:SpringBoot 的优缺点?
优点:
快速构建项目
对主流开发框架的无配置集成
项目可独立运行,无需外部依赖 Servlet 容器
提供运行时的应用监控
极大地提高了开发,部署效率
与云计算的天然集成
缺点:
书籍文档较少,且不够深入
版本迭代速度很快,一些模块改动很大。
由于不用自己做配置,报错时很难定位。
网上现成的解决方案比较少
2、介绍一下 @SpringBootApplication 注解,Spring Boot 的自动配置是如何实现的?
回答:@SpringBootApplication:包含了 @SpringBootConfiguration(打开是 @Configuration),@EnableAutoConfiguration,@ComponentScan 注解。
JavaConfig 形式的 Spring Ioc 容器的配置类使用的那个 @Configuration,SpringBoot 社区推荐使用基于 JavaConfig 的配置形式,所以,这里的启动类标注了 @Configuration 之后,本身其实也是一个 IoC 容器的配置类。任何一个标注了 @Configuration 的 Java 类定义都是一个 JavaConfig 配置类。任何一个标注了 @Bean 的方法,其返回值将作为一个 bean 定义注册到 Spring 的 IoC 容器,方法名将默认成该 bean 定义的 id。
@ComponentScan 对应 XML 配置中的元素,@ComponentScan 的功能其实就是自动扫描并加载符合条件的组件(比如 @Component 和 @Repository 等)或者 bean 定义,北京java培训最终将这些 bean 定义加载到 IoC 容器中。我们可以通过 basePackages 等属性来细粒度的定制 @ComponentScan 自动扫描的范围,如果不指定,则默认 Spring 框架实现会从声明 @ComponentScan 所在类的 package 进行扫描。
英文意思就是自动配置,概括一下就是,借助 @Import 的帮助,将所有符合自动配置条件的 bean 定义加载到 IoC 容器。
(里面最关键的是 @Import(EnableAutoConfigurationImportSelector.class),借助 EnableAutoConfigurationImportSelector,@EnableAutoConfiguration 可以帮助 SpringBoot 应用将所有符合条件的 @Configuration 配置都加载到当前 SpringBoot 创建并使用的 IoC 容器。该配置模块的主要使用到了 SpringFactoriesLoader。
SpringFactoriesLoader 为 Spring 工厂加载器,该对象提供了 loadFactoryNames 方法,入参为 factoryClass 和 classLoader 即需要传入工厂类名称和对应的类加载器,方法会根据指定的 classLoader,加载该类加器搜索路径下的指定文件,即 spring.factories 文件,传入的工厂类为接口,而文件中对应的类则是接口的实现类,或最终作为实现类。)
3、什么是 SpringBoot Starters?
和自动配置一样,Spring Boot Starter 的目的也是简化配置,而 Spring Boot Starter 解决的是依赖管理配置复杂的问题,有了它,当我需要构建一个 Web 应用程序时,不必再遍历所有的依赖包,一个一个地添加到项目的依赖管理中,而是只需要一个配置 spring-boot-starter-web, 同理,如果想引入持久化功能,可以配置 spring-boot-starter-data-jpa
4、Spirng Boot 常用的两种配置文件
回答:一个是 properties,另一个是 yaml。
追问:什么是 YAML?YAML 配置的优势在哪里 ?
YAML 现在可以算是非常流行的一种配置文件格式,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?
配置有序。在一些特殊场景下,配置有序很关键。支持数组,数组中的元素可以是基本数据类型也可以是对象。简洁。相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。
5、Spring Boot 加载配置文件的优先级了解么?
SpringBoot 加载配置文件的优先级由高到低如下:
file: ./config/ file: ./ classpath: /config/ classpath: /
SpringBoot 会从这四个位置全部加载主配置文件,高优先级的配置会覆盖低优先级的配置,并且 ,互补配置。
说明: file 就代表主目录下,classpath 代表类路径下,若不懂见下图说明。
文章来源于代码界的小白
评论